我收到一条错误消息:“submission()正好接受2个参数(给定1个)”并且我怀疑我没有成功传递2个参数。我现在已经奋斗了2天多了。谁能让我快速诊断出错了什么?
这是我的submission.html
<form method="post" action="{% url 'submission' %}" enctype="multipart/form-data">
{% csrf_token %}
<div>
<td>{{ form.title.label_tag }}</td>
<td>{{ form.title }}</td>
</div>
<div>
<td>{{ form.message.label_tag }}</td>
<td>{{ form.message }}</td>
</div>
<div>
<input type="text" name="image_id" />
<input type="hidden" name="next" value="{{ next }}" />
<input type="submit" value="Store Post" />
</div>
<a href="/discussion/registration">Register for an account</a><br>
<a href="/login">Login</a><br>
<a href="/logout/">Logout</a><br>
<a href="/discussion/">See All Comments</a><br>
<a href="/discussion/submission/">Submit</a>
</form>
这是我的view.py的一部分。目的是尝试上传图像文件。
def submission(request, image_id):
form = PostForm()
if request.user.is_authenticated() and request.method == 'POST':
form = PostForm(request.POST)
if form.is_valid() == True:
post_to_submit = Post()
post_to_submit.post_title = form.cleaned_data['title']
post_to_submit.post_text = form.cleaned_data['message']
post_to_submit.pub_date = datetime.datetime.now()
post_to_submit.user = request.user
post_to_submit.save()
image = Image.objects.get(id=image_id)
image.comments.add(post_to_submit)
template = loader.get_template('discussion/index.html')
post_list = Post.objects.order_by('-pub_date')
context = {'post_list': post_list, 'image_id' : image_id}
else:
return HttpResponse(form.errors.__str__())
elif request.user.is_authenticated() and request.method != 'POST':
form = PostForm()
template = loader.get_template('discussion/submission.html')
context = {'form' : form, 'image_id' : image_id}
elif request.user.is_authenticated() == False:
template = loader.get_template('registration/login.html')
context = {}
return HttpResponse(template.render(context, request, {'image':image}))
答案 0 :(得分:1)
我不确定只能解决您发布的问题,因为我看到您的代码中存在许多错误......结构不好。说明
希望这可以帮助您发现您在代码中搞砸了哪些内容。
1)用户身份验证/ Request.GET :重定向到提交模板,其中form
和id
为变量。在该模板中,表单action
需要一个必需的参数image_id
,因为它在def submission(request, image_id):
中清晰显示。
通过此链接<a href="/discussion/submission/">Submit</a>
,我实际上意识到您没有设置您的网址以接收任何参数
return HttpResponse(template.render(context, request, {'image':image}))
将生成NameError: name 'image' is not defined
2)用户未经过身份验证/任何请求:您呈现的模板registration/login.html
没有上下文变量。
在这种情况下
此行return HttpResponse(template.render(context, request, {'image':image}))
将生成NameError: name 'image' is not defined
3)User Authenticated / Request.POST :当用户提交表单时。
如果表单有效,您将不会收到任何错误,因为image
变量存在:
'''your codes'''
image = Image.objects.get(id=image_id)
image.comments.add(post_to_submit)
解决问题的可能方法已发布
您可以通过上下文发送image_id
并通过表单内的隐藏输入发回,而不是通过表单操作网址发送回来。您无需在论坛中提出论点。 def submission(request)
:
<input type="hidden" value="{{ image_id }}" name="image_id" />
如果您需要url中的image_id,只需添加正则表达式参数即可正确设置urls.py,并通过添加image_id
参数来编辑表单操作网址
<form method="post" action="{% url 'submission' image_id %}" enctype="multipart/form-data">