殼牌調用反向(如上所述)都非常好調試這些問題,但有兩個關鍵條件:
- 你必須提供參數,無論爭論的觀點需要相匹配,
- 這些論據必須匹配正則表達式模式。
是的,這是合乎邏輯的。是的,這也是令人困惑的,因爲反向只會拋出異常,不會給你任何進一步的提示。
URL模式的一個例子:
url(r'^cookies/(?P<hostname>[^/]+)/(?P<url_id>\d+)/$', 'register_site.views.show_cookies', name='show_cookies'),
然後在外殼會發生什麼:
>>> from register_site.views import show_cookies
>>> reverse(show_cookies)
NoReverseMatch: Reverse for 'register_site.views.show_cookies' with arguments '()' and keyword arguments '{}' not found.
,因爲我提供的任何參數它不工作。
>>> reverse('show_cookies', kwargs={'url_id':123,'hostname': 'aaa'})
'/cookies/aaa/123'
現在的工作,但...
>>> reverse('show_cookies', kwargs={'url_id':'x','hostname': 'www.dupa.com'})
NoReverseMatch: Reverse for 'show_cookies' with arguments '()' and keyword arguments '{'url_id': 'x', 'hostname': 'www.dupa.com'}' not found.
現在沒有工作,因爲url_id不匹配的正則表達式(預期數值,提供的字符串)。
您可以使用反向同時使用位置參數和關鍵字參數。語法是:
reverse(viewname, urlconf=None, args=None, kwargs=None, prefix=None, current_app=None)
,因爲它涉及到網址模板標籤,有關於它的有趣的事情。 Django的documentation給人例如使用引用視圖名稱:
{% url 'news.views.year_archive' yearvar %}
所以我把它用在一個類似的方式在我的HTML模板:
{% url 'show_cookies' hostname=u.hostname url_id=u.pk %}
但這並沒有爲我工作。但異常消息給我的可能是錯誤的暗示 - 注意周圍視圖名稱雙單引號:
Reverse for ''show_cookies'' with arguments...
它開始時,我刪除引號工作:
{% url show_cookies hostname=u.hostname url_id=u.pk %}
而且這是混淆。
你能同時顯示lcd_screen_size和filter_by_led url定義嗎? – 2009-12-03 19:56:45
因爲在shell中反向工作......這可能是導致問題的其他內容。我已經得到了一些很奇怪的反向錯誤,這似乎是任何不良的URL定義任何地方在你的項目可以搞砸整個事情:/ – Jiaaro 2009-12-04 00:10:33