关于本站
1、基于Django+Bootstrap开发
2、主要发表本人的技术原创博客
3、本站于 2015-12-01 开始建站
评论的功能打算用Django的评论库,添加引用却报错。
查了一下,Django原本会自带一个评论库组件,而从1.6版本以后就没有自带了,需要自己安装。
运行 pip install django-contrib-comments
如下修改setting.py文件
INSTALLED_APP=( #..., 'django_comments', 'django.contrib.sites', ) SITE_ID = 1
在INSTALLED_APP添加django_comments和django.contrib.sites两个应用。
在外部添加 SITE_ID=1。
django的评论库是一个站点,所以需要添加sites的应用并设置当前django工程的站点id=1
记得在urls.py添加django_comments的路由设置,url中加入如下代码:
url(r'^comments/', include('django_comments.urls')),
执行 python ./manage.py syncdb 同步一下数据库即可。
接着,修改前端页面显示评论列表和评论提交表单。这些需要使用django_comments的模版标签,在使用标签之前导入加载:
{# 导入评论库模块的模版标签 #} {% load comments %}
评论列表可以通过django_comments的get_comment_list模版标签获取,如下代码:
<div class="panel panel-default"> <div class="panel-heading"> <h4>评论列表</h4> </div> <div class="panel-body"> {% get_comment_list for blog as comments %} {% for comment in comments %} <div class="blog_comment" name="F{{comment.id}}"> <p class="comment_title"> #{{ comment.submit_date|date:"Y-m-d H:i"}} @ {{ comment.user_name }}: </p> <p class="comment_content">{{ comment.comment }}</p> </div> {% empty %} <span>暂无评论</span> {% endfor %} </div> </div>
get_comment_list模版标签的用法是for一个模版对象,as是重命名。变量得到的评论加载即可。
而评论提交表单,最主要的是提交的url和表单字段。同样也可以通过django_comments的模版标签处理,如下代码:
<h4>新的评论</h4> {% get_comment_form for blog as blog_form %} <form id="comment_form" class="form-horizontal" action="{% comment_form_target %}" method="post" > {% csrf_token %} {# 必须的字段 #} {{ blog_form.object_pk }} {{ blog_form.content_type }} {{ blog_form.timestamp }} {{ blog_form.site }} {{ blog_form.submit_date }} {{ blog_form.security_hash }} {# 用户名字段,这个后面会修改为登录用户评论,无需填这个 #} <div class="control-group"> <label class="control-label" for="id_name">名称: </label> <div class="controls"> <input type="text" id="id_name" class="input-xlarge" name="name" placeholder="请输入您的用户名" value="{{ user.username }}" /> </div> </div> {# 邮箱地址字段 #} <div class="control-group"> <label class="control-label" for="id_email">邮箱: </label> <div class="controls"> <input type="email" id="id_email" class="input-xlarge" name="email" placeholder="请输入您的邮箱地址" value="{{ user.email }}" /> </div> </div> {# 评论内容 #} <a name="newcomment" id="newcomment"></a> <div class="control-group"> <label class="control-label" for="id_comment">评论: </label> <div class="controls"> <textarea rows="6" id="id_comment" class="input-xlarge comment" name="comment" placeholder="请输入评论内容"> </textarea> </div> </div> {# 防垃圾评论 #} <p style="display:none;"> <label for="id_honeypot">如果你在该字段中输入任何内容,你的评论就会被视为垃圾评论。</label> <input type="text" name="honeypot" id="id_honeypot"> </p> {# 表单按钮 #} <div class="controls"> <div class="form-actions"> <input class="btn btn-info" id="submit_btn" type="submit" name="submit" value="提交"/> <input type="hidden" name="next" value="{%url 'detailblog' blog.id%}"/> </div> </div> </form>
其中我使用了一些Bootstrap的样式,可忽略。虽然现在可以提交评论了,但提交评论之后会跳转到一个很简陋的页面。
接下来用ajax写评论提交事件避免避免跳转到独立的评论页面,修正时间戳等Bug。
相关专题: Django评论库开发
荣党
博主这个{% get_comment_list for blog as comments %}中的 blog是你的模型对象吗,同步数据库后什么都不要做吗,然后直接按照你下面的案例来吗?😭
2018-11-27 21:55 回复
荣党
明白了,blog是我们的models对象
2018-11-28 11:23 回复
荣党 回复 荣党
再次评论自己看下效果
2018-11-28 15:40 回复
荣党
还有,你的网站发送的QQ邮件全被当作垃圾邮件被拦截了
2018-11-27 22:00 回复
荣党
45455454
2018-12-06 17:06 回复