Django url调度程序和隐式名称空间解析

时间:2013-05-06 17:23:14

标签: django django-urls

我在项目中使用django 1.4,我想在许多应用程序的视图中使用模板。我的urls.py看起来像

urlpatterns = patterns('',
    url(r'^canvas/', include('canvas.urls', namespace="canvas")),
    url(r'^checkin/', include('checkin.urls', namespace="checkin")),
    url(r'^show/', include('facebook_tab.urls', namespace="show")),

我的画布/ urls.py

from django.conf.urls import patterns, url
from canvas.views import AllShowsView

urlpatterns = patterns('',
    url(r'^shows/$', AllShowsView.as_view(), name='shows'),
)

我的facebook_tab / urls.py

from django.conf.urls import patterns, url
from facebook_tab.views import AllShowsView
urlpatterns = patterns('',
    url(r'^shows/$', AllShowsView.as_view(), name='shows'),    
)

我想使用模板,这样我在使用{% url shows %}时就不必引用当前的命名空间。

我尝试将current_app传递给Context字典但没有成功。当我尝试做reverse("shows", current_app="canvas")之类的事情时,它也不起作用。官方文件并不十分清楚。

2 个答案:

答案 0 :(得分:2)

从模板中的将来导入url应该有效:

 #At the top of the template
 {% load url from future %}

 #Somewhere in your template
 {% url "canvas:shows" %}.

见这里: https://docs.djangoproject.com/en/1.4/topics/http/urls/#url-namespaceshttps://docs.djangoproject.com/en/1.4/ref/templates/builtins/#url

答案 1 :(得分:0)

我最终做的是使用url from future作为@lalo建议,并将app和实例命名空间添加到我的urls.py

urlpatterns = patterns('',
url(r'^canvas/', include('canvas.urls', app_name="myapp", namespace="canvas")),
url(r'^checkin/', include('checkin.urls', app_name="myapp", namespace="checkin")),
url(r'^show/', include('facebook_tab.urls', app_name="myapp", namespace="facebook_tab")),

然后,根据我的观点,我将current_app设置为:

return render(request, self.template_name, context, current_app="canvas")

从我的通用模板:

{% load url from future %}
{% url 'myapp:shows'%}

根据'canvas:shows'上设置的命名空间,最后一个网址将解析为'facebook_tab:shows'current_app

我阅读了官方文档,我还没有明确区分应用程序命名空间和实例命名空间,但我设法让它工作。