[英]django 'url' template tag error
我的URLconf包含以下模式:
url(r'^accounts/logout/$','django.contrib.auth.views.logout', name="logout"),
我試圖在帶有URL標記的模板中反轉它,如下所示:
<a href="{% url logout next_page=request.path %}">logout</a>
但我不斷收到以下錯誤:
Reverse for 'logout' with arguments '()' and keyword arguments '{'next_page': u'/first-page/child/'}' not found
我認為django.contrib.auth.views.logout
應該選擇next_page
參數。 我確定我錯過了一些明顯的東西,但我不確定它是什么。
是的,你是對的,django.contrib.auth.views.logout接受一個可選的“next_page”參數,但不要忘記“url”標簽與urlconf模式匹配,而不是視圖,所以它不知道是什么或者不是視圖的參數。 所以這表明你需要在正則表達式中將“next_page”作為上述模式的命名組,你可以這樣做,但有一種更簡單的方法來處理重定向...
查看django.contrib.auth.views.logout ,您可以看到在沒有“next_page”參數的情況下,視圖會重定向到request.GET或request.POST中提供的任何url,其中包含“redirect_field_name”鍵,默認為“REDIRECT_FIELD_NAME”的參數,默認為字符串“next”。 因此,保留urlconf的方式,您可以在模板中執行以下操作:
<a href='{% url logout %}?next={{ request.path }}'>logout</a>
基本上Django的URL調度程序正在查看urlconf和該參數,並說“我不知道在哪里放置此參數”,因為它不會查看url指向的視圖函數,只查看urlconf及其中的模式。
現在,你的網址模式中沒有地方可用於該論點。
也就是說,如果您為它編寫自己的模式,或者如果您從自己的視圖中調用它,而不是從其默認的url模式調用它,則可以使用額外的參數調用django.contrib.auth.views.logout。
其中一個url模式可能適合您(未經測試):
url(r'^accounts/logout/(?P<next_page>.*)?$','django.contrib.auth.views.logout', name="logout"),
url(r'^accounts/logout/$','django.contrib.auth.views.logout', kwargs={'next_page':None}, name="logout"),
希望有所幫助!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.