[英]Django NoReverseMatch and POST URL error
我面临2个问题NoReverseMatch
和APPEND_SLASH
。
第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:
我知道网址应以“ /”结尾。
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
当我尝试更改硬编码网址时,出现以下错误,
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/
任何项目时,它将带我到URL http://127.0.0.1:8000/genericviews/1/
,这是显示错误的地方。
我检查了其他答案,但是无法正常工作。
任何帮助,将不胜感激。
它没有添加斜线,因为您没有要求它。 您已经对“更新条目”的相对URL进行了硬编码,因此将使用它。
当您尝试使用url标记时,会收到错误消息,因为尚未传递生成该URL所需的参数。 假设您在模板上下文中将object
作为object
,则将执行以下操作:
{% url 'genericviews:update-entry' pk=object.pk %}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.