【问题标题】:Django NoReverseMatch and POST URL errorDjango NoReverseMatch 和 POST URL 错误
【发布时间】:2023-03-29 03:11:02
【问题描述】:

我面临两个问题 NoReverseMatchAPPEND_SLASH

问题 #1。 APPEND_SLASH

详细信息.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 没有在最后生成“/”。上面的 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/$']

详细信息.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/ 这就是它显示错误的地方。

我检查了其他答案,但是无法正常工作。

任何帮助将不胜感激。

【问题讨论】:

  • settings.py文件中的APPEND_SLASH设置为True
  • 您应该将每个问题作为单独的问题提出,尽管首先研究您的问题,没有反向匹配错误有多个重复项(可能还有这个)
  • 不要说“请指导”,这可能会被视为轻率,而应尝试说“感谢您的宝贵时间”或“任何帮助将不胜感激”。
  • @Sayse 我发现有几个问题与此无关,但与此无关。
  • @marcusshep 谢谢 :)

标签: python django url


【解决方案1】:

它没有添加斜线,因为您没有要求它。您已经硬编码了“update-entry”的相对 URL,所以它将使用它。

当您尝试使用 url 标记时,您会收到错误,因为您没有传递生成该 URL 所需的参数。假设您的模板上下文中的对象为object,您会这样做:

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

【讨论】:

  • 我尝试用上面的网址更改网址,但它不起作用。
  • 错误:未找到带有参数“()”和关键字参数“{'pk': 1}”的“更新条目”的反向。尝试了 0 个模式:[]
  • 因为现在您错过了“genericviews:”命名空间前缀。那部分以前没有错。
猜你喜欢
  • 2017-03-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-24
相关资源
最近更新 更多