【发布时间】:2015-04-02 01:27:38
【问题描述】:
我正在尝试为 django 博客项目创建 cmets,但单击表单提交按钮时没有执行任何操作。
这是模板的 html。
<form role="form" method="post">
<div class="input-group">
{% csrf_token %}
{% for field in form %}
{{ field }}
{% endfor %}
<p>Comment: </p>
<span class="input-group-btn">
<button class="btn btn-default" type="submit">Submit</button>
</span>
</div>
</form>
这是我按下按钮时尝试调用的视图。
def detail(request, slug):
context ={}
post = BlogPost.objects.get(slug=slug)
# print(request.method)
if request.method=='POST':
form = CommentForm(request.POST)
else:
form = CommentForm()
if form.is_valid():
t = form.save(commit=False)
t.commentTime = datetime.datetime.now()
t.save()
return HttpResponseRedirect(reverse('blogpost_detail'))
comment_list=Comments.objects.order_by('-commentTime')[:25]
context = {'comment':comment_list,'form':form, 'post': post}
return render(request, 'blog/blogpost_detail.html', context)
这是模板中调用的表单。
class CommentForm(forms.ModelForm):
class Meta:
model = Comments
fields=('commentText', 'commentImage',)
exclude =('post','commentTime',)
widgets={
'commentText': forms.Textarea(attrs={'col':10}),
}
感谢您的帮助!
【问题讨论】:
-
您的
form.is_valid应该在POST检查内。如果不这样做,form.is_valid每次都会评估(即使是 GET),这不是您打算做的。此外,请确保当前 URL 是您打算POST到的位置。或者您必须明确指定action -
您的
form标签没有action;<form action="/url/to/post/to" ...> -
感谢大家的建议! @karthikr 我在我想发布的网址上,但点击时它仍然没有做任何事情。
-
按原样按下按钮时会发生什么 - 页面会重新加载吗?为了调试,我会在
if form.is_valid()块上放置一个else块——系统设置为现在这样,不通过表单的POST 和GET 之间没有明显的区别。表单可能每次都提交,但由于表单数据无效而静默失败。
标签: python django forms django-templates