我在项目中使用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")
之类的事情时,它也不起作用。官方文件并不十分清楚。
答案 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-namespaces 和 https://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
。
我阅读了官方文档,我还没有明确区分应用程序命名空间和实例命名空间,但我设法让它工作。