2012-12-03 12 views
11

W doc django funkcja URL jest jak tenJak mogę przekazać kwargs w adresie URL w Django

url(regex, view, kwargs=None, name=None, prefix='') 

mam to

url(r'^download/template/(?P<object_id>\d+)/$', views.myview().myfunction,model=models.userModel, name="sample") 

To jest mój widok

class myview(TemplateView): 

    def myfunction(self,request, object_id, **kwargs): 
     model = kwargs['model'] 

Otrzymuję ten błąd

url() got an unexpected keyword argument 'model' 

Odpowiedz

17

Próbujesz przekazać argument słowa kluczowego model do funkcji url(); trzeba przekazać w kwargs argumentu zamiast (trwa słownika):

url(r'^download/template/(?P<object_id>\d+)/$', views.myview().myfunction, 
    kwargs=dict(model=models.userModel), name="sample") 
+0

dziękuje kumplu, dokładnie to, co chcę – user825904

+0

@jpic Czy mógłbyś rozwinąć? – Medorator

+0

@buffer: prawdopodobnie jpic czuje [ich odpowiedź] (http://stackoverflow.com/a/13678956) jest lepszym podejściem, ponieważ istnieje problem z bezpieczeństwem wątków. –

8

to:

url(r'^download/template/(?P<object_id>\d+)/$', views.myview().myfunction,model=models.userModel, name="sample") 

Powinno być:

url(r'^download/template/(?P<object_id>\d+)/$', views.myview.as_view(model=models.userModel), name="sample") 

Zobacz docs

Aktualna implementacja nie jest bezpieczeństwo wątków. Na przykład:

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

można się spodziewać, że do drukowania 'Foo Żaden'? Dobrze uważać przyczyną wystąpienie jest współużytkowane przez wniosków:

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 

Więc, gdy nie jest wątku bezpieczne, nie można zakładać, że będzie w stanie czystym, gdy żądanie rozpoczyna się - inaczej niż w przypadku korzystania as_view() .

+0

Naprawdę nie wiem, jak do tego dojść. pytałem o coś innego. Chociaż używam ogólny widok, ale nazywam moją funkcję niestandardową – user825904

+0

Widzę, zastanawiam się, czy to, co robisz, jest bezpieczne dla wątków ... – jpic

+0

co masz na myśli przez wątek bezpieczny, to znaczy, co jest problemem z moim widokiem – user825904

0

wierzę, że masz taką samą funkcjonalność (i uniknąć problemów gwintowania), jeśli zrobił to w swoim 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 
Powiązane problemy