Yepyeni bir Django projem var.Bir işlev referansını Django’nun reverse() işlevine başarılı bir şekilde nasıl iletirim?
# urls.py
# -------
# coding=utf-8
from django.conf.urls.defaults import *
from myapp import views
urlpatterns = patterns('',
url(r'^myview/$', views.myview),
)
# views.py
----------
# coding=utf-8
from django.http import HttpResponse
def myview(request):
return HttpResponse('MYVIEW LOL', content_type="text/plain")
Ben geçirerek URL'yi almak için reverse()
kullanmaya çalışıyorum: Ben yerine bir dize işlevi referans olarak görünümü geçirerek, views.py
bir asgari görünüm işlevi ve urls.py
bir URL kalıbı ekledik Bu bir işlev referansı. Ben belgelerinden söyleyebilir kadarıyla
>>> from django.core.urlresolvers import reverse
>>> import urls
>>> from myapp import views
>>> urls.urlpatterns[0].callback is views.myview
True
>>> reverse(views.myview)
Traceback (most recent call last):
File "<console>", line 1, in <module>
File "/Library/Python/2.5/site-packages/django/core/urlresolvers.py", line 254, in reverse
*args, **kwargs)))
File "/Library/Python/2.5/site-packages/django/core/urlresolvers.py", line 243, in reverse
"arguments '%s' not found." % (lookup_view, args, kwargs))
NoReverseMatch: Reverse for '<function myview at 0x6fe6b0>' with arguments '()' and keyword arguments '{}' not found.
: Ama ters geçiyorum görünüm işlevi ı URL kalıbı koymak tam aynı görünüm işlevi olduğunu teyit rağmen bir maç almıyorum işlev referansları, hem URL modelinde hem de reverse()
öğesinde iyi olmalıdır.
Django bagajı kullanıyorum, revizyon 9092.
İyi soru. Ah, aynı şey, değişiklik yok. –
Evet, işlev referanslarından URL conf içindeki isim dizelerini ve tersine çevirmek için değiştirirseniz iyi çalışır. Ama biraz telaşlıyım, bunu yapmamaya çalışıyorum :) urls.py root URL conf. Bu yeni bir Django projesi; Sadece /urls.py ve /myapp/views.py dosyalarını düzenledim. –
Bunu söyledikten sonra, tersine ('myproj.myapp.views.myview') tersine, tam tersine bir dizgeyi geçirirsem, işlev referanslarını kullanarak urlconf'umu bırakabilirim. Bu muhtemelen yeterince iyi. Yine de bir bilet açma hakkında görüşürüz. –