在Understanding django.shortcuts.redirect我開始了一個關於reverse
和redirect_to
的帖子。undertading django.shortcuts.reverse,第2部分
當第一個參數是一個字符串時,我仍然有一些理解reverse
如何工作的問題。我多次閱讀https://docs.djangoproject.com/en/1.4/topics/http/shortcuts/#django.shortcuts.redirect,與reverse
對應的部分。但我仍然遇到了一個例外情況。
在我ROOT_URLCONF
我有
urlpatterns = patterns('',
url(r'^$', redirect_to, {'url': '/monitor/'}),
url(r'^monitor/', include('monitor.urls')),
)
在monitor.urls
我
urlpatterns = patterns('monitor.views',
(r'^$', 'index'),
(r'^list', 'listall'),
)
和monitor.urls
我爲這兩種功能,index
和listall
定義的代碼。在listall
我添加下面幾行:
def listall(request):
<more code goes here>
print "reversing 1 index: %s " % reverse(index)
print "reversing 2 index: %s " % reverse('index')
render_to_response("monitor/list.htmld", params)
如果我訪問本地主機:3000 /監視/列表,然後我可以看到
reversing 1 index: /monitor/
,沒有別的,第二reverse
拋出一個異常。爲什麼?我錯過了什麼?
我追蹤到djangos代碼django.core.urlresolvers.callable
和django.core.urlresolvers.get_mod_func
。 get_mod_func
似乎期望類似「a.b」,這就是爲什麼在callable
第一行返回func_name
的「索引」,但mod_name
空字符串。我改變了我的第二行
print "reversing 2 index: %s " % reverse('monitor.views.index')
和它的工作如預期。那麼,爲什麼我需要使用完整的模塊和函數名稱(當我使用字符串時)調用reverse
並且文檔沒有?我錯過了什麼?
感謝
據我所知,反向期望能夠通過它的'name'參數找到一個URL模式,或者被調用函數的全限定路徑。 – Brandon 2012-08-16 11:14:37
使用'url()'作爲'monitor.urls'中的一個urlpatterns項(與'ROOT_URLCONF'相同) - 'url()'具有可選的'name'屬性,它是可以用作字符串參數的字符串對'reverse' – yedpodtrzitko 2012-08-16 11:17:41
@yedpodtrzitko:我無法完全理解你的意思:( – Pablo 2012-08-16 11:36:02