Alm*_*mad 24 python django django-urls
考虑我包含命名空间可重用的应用程序:
urlpatterns = patterns('',
# ella urls
url('^ella/', include('ella.core.urls', namespace="ella")),
)
Run Code Online (Sandbox Code Playgroud)
现在,Ella应用程序的网址是这样的:
urlpatterns = patterns( '',
url( r'^(?P<category>[a-z0-9-/]+)/$', category_detail, name="category_detail" ),
# object detail
url( r'^(?P<category>[a-z0-9-/]+)/(?P<year>\d{4})/(?P<month>\d{1,2})/(?P<day>\d{1,2})/(?P<content_type>[a-z0-9-]+)/(?P<slug>[a-z0-9-]+)/$',
object_detail, name="object_detail" )
)
Run Code Online (Sandbox Code Playgroud)
现在,通话{% url ella:category_detail category="cat" %}工作正常.但是,当对象尝试生成指向其详细信息的链接时,它会调用
from django.core.urlresolvers import reverse
url = reverse('object_detail', kwargs={'required' : 'params'})
Run Code Online (Sandbox Code Playgroud)
这不起作用,除非重写为
from django.core.urlresolvers import reverse
url = reverse('ella:object_detail', kwargs={'required' : 'params'})
Run Code Online (Sandbox Code Playgroud)
因此,如果我理解正确,包括可重用的应用程序进入命名空间会破坏给定应用程序内的所有内部reverse().
这是真的吗?我错过了什么?有什么办法吗?
由于你有名称间隔的url配置,你需要提到namespace:view-name模式以便正确地反转它(特别是从视图中).
但是,如果您想避免这种情况,您也可以将namespace/appname作为current_app参数传递.当您在模板中时,有多种方法可以指定current_app.但是如果你在视野中,你需要像你一样进行硬编码,或者传递给current_app参数
url = reverse('object_detail',
kwargs={'foo':'bar'},
current_app=app_name_or_name_space)
Run Code Online (Sandbox Code Playgroud)
参考:http://docs.djangoproject.com/en/dev/topics/http/urls/#reverse