2016-01-20 119 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,則永遠無法將其撤銷。