簡體   English   中英

django'url'模板標簽錯誤

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM