在django doc中,url函数就像这样
url(regex, view, kwargs=None, name=None, prefix='')
我有这个
url(r'^download/template/(?P<object_id>\d+)/$', views.myview().myfunction,model=models.userModel, name="sample")
这是我的观点
class myview(TemplateView):
def myfunction(self,request, object_id, **kwargs):
model = kwargs['model']
我收到此错误
url() got an unexpected keyword argument 'model'
答案 0 :(得分:19)
您正尝试将model
关键字参数传递给url()
函数;你需要传入一个kwargs
参数(它需要一个字典):
url(r'^download/template/(?P<object_id>\d+)/$', views.myview().myfunction,
kwargs=dict(model=models.userModel), name="sample")
答案 1 :(得分:8)
此:
url(r'^download/template/(?P<object_id>\d+)/$', views.myview().myfunction,model=models.userModel, name="sample")
应该是:
url(r'^download/template/(?P<object_id>\d+)/$', views.myview.as_view(model=models.userModel), name="sample")
请参阅docs
您当前的实现不是线程安全的。例如:
from django import http
from django.contrib.auth.models import User
from django.views import generic
class YourView(generic.TemplateView):
def __init__(self):
self.foo = None
def your_func(self, request, object_id, **kwargs):
print 'Foo', self.foo
self.foo = 'bar'
return http.HttpResponse('foo')
urlpatterns = patterns('test_app.views',
url(r'^download/template/(?P<object_id>\d+)/$', YourView().your_func,
kwargs=dict(model=User), name="sample"),
)
您是否希望打印'Foo 无'?请小心,因为实例在请求之间共享:
Django version 1.4.2, using settings 'django_test.settings'
Development server is running at http://127.0.0.1:8000/
Quit the server with CONTROL-C.
Foo None
[03/Dec/2012 08:14:31] "GET /test_app/download/template/3/ HTTP/1.1" 200 3
Foo bar
[03/Dec/2012 08:14:32] "GET /test_app/download/template/3/ HTTP/1.1" 200 3
因此,当它不是线程安全时,你不能假设它在请求开始时会处于干净状态 - 与使用as_view()不同。
答案 2 :(得分:0)
如果您在views.py
from django.views.generic import TemplateView
from .models import userModel
class myview(TemplateView):
def myfunction(self, request, object_id, *args, **kwargs):
model = userModel
# ... Do something with it