2016-01-20 122 views
0

我需要2个网址,显示完全相同的视图和URL模式,所以在我的主urls.py文件,我这样做:Django网址:多个网址,相同的视图。然后使用{%URL%}模板

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 %} 

据我了解,使用“APP_NAME”应该让我能够做到这一点,但这里所发生的不同的事情:

  • APP_NAME只在“旅游局/ EVENEMENTS”:这两个页面显示“旅游局/ EVENEMENTS” URL与双方的{% url %}标签
  • APP_NAME:这两个页面显示与{% url %}标签
  • APP_NAME上既没有 “EVENEMENTS” 网址:这两个页面显示与{% url %}标签

我的 “EVENEMENTS” 网址能够'让它在两个页面上显示不同的网址。我做了什么在这个答案告诉:https://stackoverflow.com/a/8039846/2174532

任何想法,为什么不行?顺便说一句,我在Django 1.6上。

感谢

回答

1

既然你不上1.9还没有,你需要一个命名空间提示手动设置为当前实例命名空间。您可以通过将current_apprender()(或直接向您的上下文实例),这样做的:

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

在1.8设置request.current_app,而不是通过命名空间上下文的。在1.9中,这是为你完成的。

您需要将app_name设置为'events'。 Django将查找应用程序名称空间,并且只有在没有找到应用程序名称空间的情况下才会回退到实例名称空间。如果您将一个实例名称空间命名为与应用程序名称空间相同的app_name,则永远无法将其撤销。