2016-07-01 8 views
3

2が与えられたと私はそれが何を意味するのかわからない:例外TypeError:as_viewは、(1つの)位置引数を取りますが、私はエラーを得た

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'})), 
       ] 

私は間違って何をしていますか?

ありがとうございます!

+0

なぜあなたは後でそれらを使用していない場合、ルータでレジスタパスを使用しますか? – RKI

答えて

7

as_viewは、位置引数をとらないため、キーワード引数をとります。

EmployeeTemplateView.as_view(emp='employees') 
+0

ありがとう!これはTypeErrorを解決しましたが、別のエラーが発生しました:EmployeeTemplateView()は無効なキーワード 'employee'を受け取りました。 as_viewはすでにクラスの属性である引数だけを受け入れます。 私は何をすべきですか? – XhensB

+0

この引数を渡す理由を説明できますか?あなたはそれを使って何を望んでいますか? –

+0

従業員をビューからテンプレートに渡したいと思います。私はそれを完全に間違っているのですか? – XhensB

1

あなただけのビューからテンプレートにemployees変数を渡すしようとしているように見えるので、あなたはそれをこのように送信することができます。

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"), 
       ] 

そして、あなたはほどテンプレートでcontext_object_nameを使用することができます。

index.htmlを

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

はあなたのような "as_viewを()" を入れていることを確認します。 "as_view"ではありません。私はこのような大きな間違いを犯しました

+0

ありがとう、あなたのコメントは、私のエラーを見つけることができます! – cessor

関連する問題