16

djangoドキュメントでは、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'
4

3 に答える 3

19

関数modelにキーワード引数を渡そうとしています。代わりに引数url()を渡す必要があります(辞書が必要です):kwargs

url(r'^download/template/(?P<object_id>\d+)/$', views.myview().myfunction, 
    kwargs=dict(model=models.userModel), name="sample")
于 2012-12-03T07:33:05.320 に答える
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")

ドキュメントを参照してください

現在の実装はスレッドセーフではありません。例えば:

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 None 'と印刷されると思いますか?インスタンスがリクエスト間で共有されるため、注意が必要です。

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()を使用する場合とは異なり、リクエストの開始時にクリーンな状態になるとは想定できません。

于 2012-12-03T07:31:30.110 に答える
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
于 2013-12-27T16:10:27.890 に答える