2013-05-06 5 views
1

Я использую django 1.4 в проекте, и я хочу использовать шаблон для просмотра многих приложений. Мой urls.py выглядитDjango url dispatcher и неявное разрешение пространства имен

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 в контекстном словаре без каких-либо успехов. Также он не работает, когда я пытаюсь сделать что-то вроде reverse("shows", current_app="canvas"). Официальная документация не совсем понятна.

ответ

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.

Я прочитал официальные документы, и я уже не понимаю разницу между пространством имен приложений и пространства имен экземпляров, но мне удалось заставить его работать.

Смежные вопросы