Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
662 views
in Technique[技术] by (71.8m points)

python - Django 2.1.3 Error: __init__() takes 1 positional argument but 2 were given

I am trying to develop a website with Django 2.1.3 and python 3.7.1 When I go to the homepage I get this error:

TypeError at / __init__() takes 1 positional argument but 2 were given

Here are some details about the code I write:

Traceback

    Environment:


    Request Method: GET
    Request URL: http://127.0.0.1:8000/
    
    Django Version: 2.1.3
    Python Version: 3.7.1
    Installed Applications:
    ['django.contrib.admin',
     'django.contrib.auth',
     'django.contrib.contenttypes',
     'django.contrib.sessions',
     'django.contrib.messages',
     'django.contrib.staticfiles',
     'core',
     'crispy_forms']
    Installed Middleware:
    ['django.middleware.security.SecurityMiddleware',
     'django.contrib.sessions.middleware.SessionMiddleware',
     'django.middleware.common.CommonMiddleware',
     'django.middleware.csrf.CsrfViewMiddleware',
     'django.contrib.auth.middleware.AuthenticationMiddleware',
     'django.contrib.messages.middleware.MessageMiddleware',
     'django.middleware.clickjacking.XFrameOptionsMiddleware']
    
    
    
    Traceback:
    
    File "C:UsersandreAppDataLocalProgramsPythonPython37-32libsite-packagesdjangocorehandlersexception.py" in inner
      34.             response = get_response(request)
    
    File "C:UsersandreAppDataLocalProgramsPythonPython37-32libsite-packagesdjangocorehandlersase.py" in _get_response
      126.                 response = self.process_exception_by_middleware(e, request)
    
    File "C:UsersandreAppDataLocalProgramsPythonPython37-32libsite-packagesdjangocorehandlersase.py" in _get_response
      124.                 response = wrapped_callback(request, *callback_args, **callback_kwargs)
    
    File "C:UsersandreAppDataLocalProgramsPythonPython37-32libsite-packagesdjangocontribauthdecorators.py" in _wrapped_view
      21.                 return view_func(request, *args, **kwargs)
    
    Exception Type: TypeError at /
    Exception Value: __init__() takes 1 positional argument but 2 were given

core/models.py

This is just one table on DB:

from django.db import models


class Evento(models.Model):
    titolo_evento = models.CharField(max_length=30)
    data_inizio = models.DateTimeField()
    data_fine = models.DateTimeField()

    def __str__(self):
        return self.titolo_evento

    class Meta:
        verbose_name = 'Evento'
        verbose_name_plural = 'Eventi'

core/views.py

Here I want to see the DB "Eventi" on the homepage only if the user is authenticated, i think the mistake is here, but i don't know where:

from django.contrib.auth.decorators import login_required
from .models import Evento
from django.views.generic.list import ListView


@login_required
class HomeView(ListView):
    queryset = Evento.objects.all()
    template_name = 'core/homepage.html'
    context_object_name = 'lista_eventi'

core/urls.py

from django.urls import path
from . import views


urlpatterns = [
    path('', views.HomeView, name='homepage'),
    ]

urls.py(project)

  from django.contrib import admin
    from django.urls import path, include
    
    urlpatterns = [
        path('admin/', admin.site.urls),
        path('', include('core.urls')),
        path('accounts/', include('django.contrib.auth.urls'))
    ]
See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

You need use as_view() at the end of class based views when declaring in the urls:

path('', views.HomeView.as_view(), name='homepage'),

Also, when using login_required decorator, you need to use it on dispatch method of CBV:

from django.contrib.auth.decorators import login_required
from django.utils.decorators import method_decorator

class HomeView(ListView):

    @method_decorator(login_required)
    def dispatch(self, *args, **kwargs):
        return super(HomeView, self).dispatch(*args, **kwargs)

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...