带有NoReverseMatch错误的Django表单POST
在html中:带有NoReverseMatch错误的Django表单POST,django,forms,post,Django,Forms,Post,在html中: <form role="form" method="post" action="{% url 'myapp:add_review' %}" enctype="multipart/form-data"> {% csrf_token %} <div class="form-group"> <div class="col-sm-10"> <input id="review" name="
<form role="form" method="post" action="{% url 'myapp:add_review' %}" enctype="multipart/form-data">
{% csrf_token %}
<div class="form-group">
<div class="col-sm-10">
<input id="review" name="review" type="text">
</div>
</div>
<button type="submit" class="btn btn-default"> Submit </button>
</form>
在URL.py中
app_name = 'myapp'
urlpatterns = [
url(r'^$', views.IndexView.as_view(), name='index'),
# register, login, logout
url(r'^register/$', views.UserFormView.as_view(), name='register'),
url(r'^login/$', views.login_user, name='login'),
url(r'^logout/$', views.logout_user, name='logout'),
# individual article page
url(r'^(?P<item_id>[0-9]+)/$', views.single_item, name='single_item'),
url(r'^(?P<item_id>[0-9]+)/add_review/$', views.add_review, name='add_review'),
]
app_name='myapp'
URL模式=[
url(r'^$',views.IndexView.as_view(),name='index'),
#注册、登录、注销
url(r'^register/$',views.UserFormView.as_view(),name='register'),
url(r“^login/$”,views.login\u user,name='login'),
url(r“^logout/$”,views.logout\u user,name='logout'),
#个人文章页
url(r'^(?P[0-9]+)/$',views.single_item,name='single_item'),
url(r'^(?P[0-9]+)/add_review/$',views.add_review,name='add_review'),
]
非常基本的东西,在每个单独的项目页面中,我想要一个表单来为每个项目编写和发布评论,然后返回到同一个项目页面
当我在“单个项目”页面中时,会出现以下错误:
Reverse for 'add_review' with arguments '('',)' and keyword arguments '{}' not found.
1 pattern(s) tried: ['(?P<item_id>[0-9]+)/add_review/$']
add_review'与参数“(”,)”和关键字参数“{}”相反。
尝试了1个模式:['(?P[0-9]+)/add_review/$']
通常,这些类型的错误表明URL有问题,没有找到这样的模式,缺少一些参数等等。从这个特定的错误来看,您似乎没有将item\u id
传递给url匹配器。因此,Django无法找到合适的URL。你有:
url(r'^(?P<item_id>[0-9]+)/add_review/$', views.add_review, name='add_review')
这应该构造一个有效的url(例如,../1/add_review/
),Django应该识别该url。但是,我相信您的add\u review()
函数也需要使用item\u id
参数,否则您可能会由于意外的函数参数而得到TypeError
至于返回值,我将使用redirect
而不是render
,就像您在成功发布后重定向一样。尽管您可能也需要传递一个项目id
,因为您的URL配置指定:a)URL应该有项目id
和b)单个项目()
需要项目id
。像这样的方法应该会奏效:
def add_review(request, item_id):
...
return redirect('myapp:single_item', {'item_id': item_id})
single\u item
的签名应该是这样的:single\u item(request,item\u id)
通常,这些类型的错误表示URL有问题,没有找到这样的模式,缺少一些参数等等。从这个特定的错误来看,您似乎没有将item\u id
传递给url匹配器。因此,Django无法找到合适的URL。你有:
url(r'^(?P<item_id>[0-9]+)/add_review/$', views.add_review, name='add_review')
这应该构造一个有效的url(例如,../1/add_review/
),Django应该识别该url。但是,我相信您的add\u review()
函数也需要使用item\u id
参数,否则您可能会由于意外的函数参数而得到TypeError
至于返回值,我将使用redirect
而不是render
,就像您在成功发布后重定向一样。尽管您可能也需要传递一个项目id
,因为您的URL配置指定:a)URL应该有项目id
和b)单个项目()
需要项目id
。像这样的方法应该会奏效:
def add_review(request, item_id):
...
return redirect('myapp:single_item', {'item_id': item_id})
single\u item
的签名应该是这样的:single\u item(request,item\u id)
我知道id部分有问题,不知道在哪里以及如何。谢谢你的详细解释,现在对我来说完全有意义了。我知道id部分出了问题,不知道在哪里以及如何。谢谢你的详细解释,现在我完全明白了。