Django URL:多个URL,相同的视图。然后在模板中使用{%url%}

时间:2016-01-20 14:09:14

标签: python django url

我需要2个网址来显示完全相同的视图和网址格式,所以在我的主urls.py文件中,我这样做:

url(r'^evenements/', include('project.events.urls', namespace='events')),
url(r'^tourisme/evenements/', include('project.events.urls', namespace="tourisme_event", app_name='events')),

然后在我的活动应用中,我在urls.py

中有这个
urlpatterns = patterns('',
    url(r'^$', views.listing, name='index'),
    url(r'^(?P<slug>.*)/$', views.detail, name='detail'),
)

现在我想要实现的是为两个网址显示完全相同的视图,但我需要链接在模板中使用此功能:

{% url 'events:detail' event.event.slug %}

根据我的理解,使用&#34; app_name&#34;应该允许我这样做,但这里发生了不同的事情:

  • app_name仅适用于&#34; tourisme / evenements&#34;:两个页面都显示了&#34; tourisme / evenements&#34;带有{% url %}标记的网址
  • 两者的app_name:两个页面都显示&#34; evenements&#34;带有{% url %}标记的网址
  • app_name on both:两个页面都显示&#34; evenements&#34;带有{% url %}标记的网址

我无法在两个页面上显示不同的网址。我做了这个答案中所说的:https://stackoverflow.com/a/8039846/2174532

知道为什么那不起作用?顺便说一下,我在Django 1.6上。

由于

1 个答案:

答案 0 :(得分:1)

由于您尚未使用1.9,因此需要手动将命名空间提示设置为当前实例命名空间。您可以将current_app传递给render()(或直接传递给您的上下文实例)来执行此操作:

render(request, 'template.html', current_app=request.resolver_match.namespace)

在1.8中,您设置request.current_app而不是将命名空间传递给上下文。在1.9中,这是为您完成的。

您需要在两个包含中将app_name设置为'events'。 Django将查找应用程序命名空间,如果没有找到应用程序命名空间,则只返回实例命名空间。如果将实例名称空间命名为没有app_name与应用程序名称空间相同,则您永远无法对其进行反转。