1

我在一个项目中使用 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")。官方文档对此并不十分清楚。

4

2 回答 2

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

于 2013-05-06T18:47:53.353 回答
0

我最终所做的是url from future按照@lalo 的建议使用,并将应用程序和实例命名空间添加到我的 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'%}

最后一个 url 将解析为'canvas:shows''facebook_tab:shows'取决于在current_app.

我阅读了官方文档,并没有清楚地了解应用程序命名空间和实例命名空间之间的区别,但我设法让它工作。

于 2013-05-07T17:08:50.017 回答