今天简单说说Django中form表单的的使用
这两天一直被一件事给烦到茶饭不思,就是我博客的评论功能现在只实现了别人评论我的博客,我还不能回复评论更别说用户评论用户的评论了,虽然我的博客也没几个人来看,但是有句话说得好,麻雀虽小,五脏俱全。不管有没有人看,这个功能还是得实现了的,所以今天研究了下Django自带的form表单。
创建表单
在app根目录下新建一个form.py,在里面写入
from django import forms
class CommentForm(forms.Form):
content_type = forms.CharField()
object_id = forms.IntegerField()
comment_content = forms.CharField(widget=forms.Textarea)
- 代码解释
自定义表单类并继承forms. Form forms. CharField 代表html中的input标签 forms. CharField(widget=forms. Textarea) 代表html中textarea标签
有个问题来了,我们有时候想需要将一些数据放在隐藏input标签里,这时候应该怎么办呢?
我们只需加入以下参数即可
content_type = forms.CharField(widget=forms.HiddenInput)
我们还需要在view.py的视图函数中将这个表单初始化并传递给模板(前端)
from comment.forms import CommentForm
def ...
data = {
'content_type':'article',
'object_id':'29'
}
# initial 可以在表单初始化时传递数据进去,是一个字典
context = {'article': article,'comment_form':CommentForm(initial=data)}
在前端中我们这样做
<div class="card-body p-2 p-md-3 bg-white mt-3 f-13">
<form action="{% url 'comment_submit' %}" method="post">
{% for field in comment_form %}
{{ field }}
{% endfor %}
{% csrf_token %}
<input type="submit" class="btn btn-primary">
</form>
</div>
这样表单就可以正确的显示出来,如下图:
可以看到两个input框里就是我们在views.py中初始化时传进去的value
当然我们肯定是要用ajax来提交评论的,所以我们在form标签内写入
onsubmit="return false;"
再给提交按钮一个id,比如id为submit
这样我们就可以在js中写入:
$("#submit").click(function(){
$.post({
...
})
})
但是别忘了,在使用post方法时必须同时提交csrf_token,否则后端会403错误
最后修改于2020年3月23日 21:46
©允许规范转载
Django Python版权声明:如无特殊说明,文章均为本站原创,转载请注明出处
本文链接:https://www.yangyingqi.com/18.html