web-dev-qa-db-de.com

TypeError: as_view () nimmt 1 Positionsargument an, aber 2 wurden angegeben

Ich habe eine Fehlermeldung erhalten und bin mir nicht sicher, was dies bedeutet:

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

from Django.db import models
from Django.contrib.auth.models import User
from Django.contrib import admin

class Employee(models.Model):
    user = models.OneToOneField(User)
    full_name = models.CharField(max_length=50)
    phone_number = models.CharField(max_length=12)
    company = models.CharField(max_length=100)
    department = models.CharField(max_length=50)
    occupation = models.CharField(max_length=50)

    class Meta:
        verbose_name_plural = 'employees'

admin.site.register(Employee)

views.py

from Django.views.generic import TemplateView
from web_app.models import Employee

class EmployeeTemplateView(TemplateView):
    model = Employee.objects.all()
    template_name = 'index.html'
    context_object_name = 'employee_view'

urls.py

from Django.conf.urls import url, include
from web_app import routers
from Django.contrib import admin
from . import views
from web_app.views import EmployeeTemplateView
admin.autodiscover()

router = routers.DefaultRouter()
router.register(r'employee', views.EmployeeTemplateView, "Employee")

urlpatterns = ['',
               url(r'^$', EmployeeTemplateView.as_view({'emp' : 'employees'})),
               ]

Was mache ich falsch?

Danke im Voraus!

7
XhensB

as_view akzeptiert keine Positionsargumente, sondern Schlüsselwortargumente.

EmployeeTemplateView.as_view(emp='employees')
7
Daniel Roseman

Stellen Sie sicher, dass Sie "as_view ()" als solches setzen. Nicht "as_view". Ich habe so einen großen Fehler gemacht

14
felix

Da es so aussieht, als würden Sie nur versuchen, die Variable employees aus der Ansicht an die Vorlage zu übergeben, können Sie sie einfach so senden:

views.py

from Django.views.generic import ListView
from web_app.models import Employee

class EmployeeListView(ListView):
    model = Employee
    template_name = 'index.html'
    context_object_name = 'employees'

urls.py

urlpatterns = [
               url(r'^$', EmployeeListView.as_view(), name="employees"),
               ]

Dann können Sie den context_object_name in der Vorlage wie folgt verwenden:

index.html

<div>{% for employee in employees %} {{ employee }} {% endfor %}</div>
1
Hybrid