2013-06-12 66 views
1

我試圖讓django namespaced url resolution工作,因爲我希望我的老闆和他的老闆能夠看到模板並從一個只填充虛假數據的應用程序對它們發表評論,而實際上並沒有任何東西,而我使用相同的模板開發不同的應用程序中的實時代碼。所以,如果你去http://localhost:8000/template_test/base看到base.html文件模板用假數據,如果你去http://localhost:8000/uar/base你看到的(希望)真實數據base.html文件。作爲一個額外的複雜性,頁面上的鏈接應該根據您是否已經轉到/ template_test/base url或/ uar/base url而使用假數據或真實數據進入uar.html。命名空間網址分辨率

因此,這裏的模板的相應部分:

<li> 
    <a href="{% url 'uar:uar' %}">User Access Review</a> 
</li> 

這裏是我的項目/ urls.py的適當部分

url(r'^template_test/', include(template_test.urls, 
    namespace="uar", app_name="template_test")), 

url(r'^uar/', include(uar.urls, namespace="uar", app_name="uar")), 

而且在template_test/urls.py

urlpatterns = patterns('', 
    url(r'^base$', template_test.views.base, name="base"), 
    url(r'^uar$', template_test.views.uar_missing, name="uar"), 

and in uar/urls.py

urlpatterns = patterns('', 
    url(r'^base$', uar.views.base, name="base"), 
    url(r'^uar$', uar.views.uar_missing, name="uar"), 

template_test/views.py

def base(request): 
    return render(request, "base.html", {"full_name": "Fake User"}, 
      current_app="template_test") 

和UAR/views.py

def base(request): 
    return render(request, "base.html", {"full_name": "Paul Tomblin"}, 
      current_app="uar") 

def uar_missing(request): 
    return render(request, "uar.html", {}, current_app="uar") 

但是,儘管事實上,我提供一個應用程序上下文的模板,當基地.html在上下文中呈現,模板中的{% url 'uar:uar' %}在上下文中最終爲/template_test/uar/({{full_name}}具有相應的值,分別爲「假用戶」或「Paul Tomblin」)。我必須更改哪些鏈接才能使用當前的應用上下文?

其他信息應用程序上下文不與反向工作:

python manage.py shell 
Python 2.7.4 (default, Apr 19 2013, 18:28:01) 
[GCC 4.7.3] on linux2 
Type "help", "copyright", "credits" or "license" for more information. 
(InteractiveConsole) 
>>> from django.core.urlresolvers import reverse 
>>> reverse('uar:uar') 
'/template_test/uar' 
>>> reverse('uar:uar', current_app='uar') 
'/template_test/uar' 
>>> reverse('uar:uar', current_app='template_test') 
'/template_test/uar' 
>>> reverse('uar:uar', current_app='txx') 
'/template_test/uar' 

回答

0

顯然我是令人困惑的「命名空間」和「APP_NAME」。我的項目/ urls.py現在看起來像:

url(r'^template_test/', 
     include(build_urls(template_test.views, 'template_test'), 
     namespace="template_test", app_name="uar")), 

    url(r'^uar/', 
     include(build_urls(uar.views, 'uar'), 
     namespace="uar", app_name="uar")), 

注:我已經切換命名空間和app_name。

的template_test/views.py具有

def base(request): 
    return render(request, "base.html", {"full_name": "Fake User"}, 
      current_app="template_test") 

和UAR/views.py具有

def base(request): 
    return render(request, "base.html", {"full_name": "Paul Tomblin"}) 

注:我不是在傳遞中CURRENT_APP阿聯/ views.py中更多。

作爲額外的好處,我還發現,當我使用重定向時,我需要使用正確的current_app進行「反向」操作。