2017-08-09 126 views
-1

我面臨2個問題NoReverseMatchAPPEND_SLASHDjango NoReverseMatch和POST URL錯誤

問題#1。 APPEND_SLASH

Detail.html

<form action="update-entry" method="post"> 
/* if I add '/' at the end of update-entry, it works fine. */ 
{% csrf_token %} 
{{ form }} 
<input type="submit" value="Edit"> 
</form> 

當我點擊編輯按鈕,我得到下面的錯誤,

You called this URL via POST, but the URL doesn't end in a slash and you have 
APPEND_SLASH set. Django can't redirect to the slash URL while maintaining 
POST data. Change your form to point to 127.0.0.1:8000/genericviews/1/update- 
entry/ (note the trailing slash), or set APPEND_SLASH=False in your Django 
settings. 

這是生成的URL:

http://127.0.0.1:8000/genericviews/1/update-entry

我知道URL應該以'/'結尾。

urls.py

urlpatterns = [ 

url(r'^$', views.IndexView.as_view(), name='index'), 
url(r'^(?P<pk>[0-9]+)/$', views.DetailsView.as_view(), name='detail'), 
url(r'^makeentry$', views.makeentry, name='makeentry'), 
url(r'^static/$', views.StaticView.as_view()), 


url(r'^new-entry/$', views.MakeEntryView.as_view(), name='new-entry'), 

url(r'^(?P<pk>[0-9]+)/update-entry/$', views.UpdateEntryView.as_view(), name='update-entry'), 


] 

我的困惑是,爲什麼網址是不是在最後生成 '/'。上面的URL模式對我來說似乎是正確的

問題2 NoReverseMatch

當我試圖改變硬編碼的URL,我得到下面的錯誤,

NoReverseMatch at /genericviews/1/ 
Reverse for 'update-entry' with arguments '()' and keyword arguments '{}' 
not found. 1 pattern(s) tried: ['genericviews/(?P<pk>[0-9]+)/update- 
entry/$'] 

Detail.html

<form action="{% url 'genericviews:update-entry' %}" method="post"> 
{% csrf_token %} 
{{ form }} 
<input type="submit" value="Delete Product"> 
</form> 

試圖聯繫爲好,

{#<a href="{% url 'genericviews:update-entry' %}">Edit</a>#} 

當我點擊頁面http://127.0.0.1:8000/genericviews/, 中的任何項目時,它會將我帶到網址http://127.0.0.1:8000/genericviews/1/ 而這就是它顯示錯誤的地方。

我檢查了其他答案,但是,無法讓它工作。

任何幫助,將不勝感激。

+0

集'APPEND_SLASH'在'settings.py'文件爲True –

+0

你應該提高每一個問題作爲獨立的問題,儘管研究您的問題第一,有沒有反向匹配錯誤(可能是這一個)的多個副本 – Sayse

+0

而不是說「請指導」,這可能被視爲不體諒,你應該嘗試說「謝謝你的時間」或「任何幫助將讚賞「。 – marcusshep

回答

2

它沒有添加斜線,因爲你沒有要求。你已經對「update-entry」的相對URL進行了硬編碼,所以這就是它的用法。

當您嘗試使用url標記時,您會收到錯誤消息,因爲您尚未傳遞生成該URL所需的參數。假設你已經在你的模板上下文object對象,你會怎麼做:

{% url 'genericviews:update-entry' pk=object.pk %} 
+0

我試着改變上面的URL,但它不工作。 – PRK

+0

錯誤:未找到參數'()'和關鍵字參數'{'pk':1}''的'update-entry'反向。嘗試了0個模式:[] – PRK

+0

因爲現在您已經錯過了'genericviews:'命名空間前綴。之前這部分沒有錯。 –