django博客四

来源:互联网 发布:澳门网络博客骗局 编辑:程序博客网 时间:2024/06/05 18:06
评论

博客怎么能少了评论呢?一个好消息是,Django 提供了内置的功能来实现评论。通过典型的应用安装方式,我们将下面代码加在settings.py中,注意要放在INSTALLED_APPS的'django.contrib.admin'之下。

[python] view plaincopyprint?
  1. ‘django.contrib.comments’,  
之后我们需要把它映射到我们的posts。简单起见,我们编辑项目的urls.py并在urlpatterns中加上下面代码:

[python] view plaincopyprint?
  1. (r’^comments/’, include(‘django.contrib.comments.urls’)),  

现在我们就能向我们的帖子里加评论了。评论应用加上定制模板标签。在模板标签前使用{% load comments %}来加载评论。

列表页

编辑posts/post_list.html:

[python] view plaincopyprint?
  1. {% extends ‘base.html’ %}  
  2. {% load comments %}  
  3. {% block content %}  
  4. {% for object in object_list %}  
  5.     <hr/>  
  6.     {% include ‘posts/_post.html’ %}  
  7.     {% get_comment_count for object as comment_count %}  
  8.     <small>{{ comment_count }} comment{{ comment_count|pluralize }}</small>  
  9. {% endfor %}  
  10. {% endblock %}  

我们加载了评论模板标签,并且获得了给定帖子对象的评论数,再将帖子展示出来。你可能注意到了那个pluralize(复数)过滤器。在我们的例子中,这个复数过滤器接收一个数值然后在值不为1的情况下多输出一个s。对于那些复数形式不以s结尾的,会表示成:

[python] view plaincopyprint?
  1. fish{{ fish_count|pluralize:”es” }}  
或者
[python] view plaincopyprint?
  1. famil{{ family_count|pluralize:”y,ies” }}  
里面的冒号代表了能被过滤器接受的参数。一个过滤器能接受除了左边的输入变量以外至多一个附加参数。

内容页

编辑post_detail.html并在include标签后添加下面代码:

[python] view plaincopyprint?
  1. {% get_comment_list for object as comment_list %}  
  2. <h3>Comments</h3>  
  3. {% for comment in comment_list %}  
  4.     <div id=”comment_{{ comment.id }}”>  
  5.         <p>{{ comment.comment }}</p>  
  6.         <small>{{ comment.name }}</small>  
  7.     </div>  
  8. {% empty %}  
  9.     <p>It’s pretty quiet here… be first to comment!</p>  
  10. {% endfor %}  

get_comments_list标签的用处就像它的名字。它把从某个特定模型中获得的评论存储在comment_list中。使用comment_list,就和在post_list.html中使用object_list一样,我们能通过一个循环来遍历所有的评论。你可能还注意到empty模板标签。那就像在一个if语句中的else子句一样。对于一个for循环,如果在列表中没有任何元素,empty块就会被显示。

最后,让我们加上一个评论表单,来提交新的评论。加上以下代码:

[python] view plaincopyprint?
  1. <hr/>  
  2. <h3>Your comment</h3>  
  3.   
  4. {% get_comment_form for object as form %}  
  5.   
  6. <form action=”{% comment_form_target %}?next={% url post object.id %}” method=”post”>  
  7.     {{ form.content_type }}  
  8.     {{ form.object_pk }}  
  9.     {{ form.timestamp }}  
  10.     {{ form.security_hash }}  
  11.     <p style=”display:none”><label for=”id_honeypot”>Leave blank</label>{{ form.honeypot }}</p>  
  12.     <p>  
  13.         <label for=”id_name”>Name</label>  
  14.         {{ form.name }}  
  15.     </p>  
  16.     <p>  
  17.         <label for=”id_comment”>Comment</label>  
  18.         {{ form.comment }}  
  19.     </p>  
  20.     <p><input type=”submit” name=”post” value=”Post” /></p>  
  21. </form>  


就像你看到的一样,评论表单还提供了一个get_comment_form模板标签。它的作用是从一个模型对象返回一个对象表单来帮我们展示表单。由于我们在html编写上很粗糙,我们只能输出一个生成输入表单的字段。首先的4个字段是:content_type,object_pk, timestamp,security_hash,它们是用来生成评论的隐藏字段。

content_type 是一个特殊的Django属性,它能将一个模型与其他任何模型关联起来。Content types通常是一个指向其他模型的外键,它对于建立一个模型来说非常方便。使用content type,标签或者目录能作为一个独立的应用简单的实现,而不用扩大我们的post应用。但这些属性超出了这个应用的范围。

object_pk是一个特定对象的与时间标示相关联的主键(就是post的id),它是自解释的。评论框架使用security_hash来检测一些欺诈信息。honeypot字段也很相似,把它填上会自动保护评论表单。但这些输入字段都是text类型的,因此我们需要通过CSS来隐藏它们。

接下来的2个字段是给用户输入的常规字段。当然你还可以自己加上email与url或者其他的,但我们的评论做的很简单,只需要输入姓名和评论。

这样,大致就成型了。效果如下:


总结:第一次这么做翻译,很清楚自己翻的很烂。建议去看原文吧。

            之后可能还会在多看看官方文档。总的来说Django确实是不错的一个框架,大家值得一试。

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 寝室的电闸不亮了怎么办 海绵城市改造只挖不修怎么办 怀孕一个月做了胸透怎么办 怀孕了照了胸透怎么办 刚怀孕照了胸透怎么办 怀孕进了ct室怎么办 消防稳压罐气囊压力不够怎么办 备孕期间拍了ct怎么办 晚上睡不好老做梦怎么办 零线和地线短路怎么办 火花塞拧的过紧怎么办 眼睛被电弧光灼伤怎么办 电脑模拟器微信附近人屏蔽了怎么办 美的电压锅漏气怎么办 电压力锅排气阀漏气怎么办 win10系统上不了网怎么办 手机自拍杆坏了怎么办 车辆遭核生化打击时怎么办? 遭核生化打击时怎么办? 车辆行驶中遭核生化打击时怎么办? 硫酸气体熏到嗓子怎么办 硫酸味儿进嗓子了怎么办 吸入二氧化氯气体后怎么办 衣服84消毒 变色了怎么办 我的身份证被诈骗犯知道了怎么办 母婴店来客人少怎么办 键盘驱动被卸载了怎么办 广州 狗狗随地大小便怎么办 上海 狗狗随地大小便怎么办 服装店人流量少生意差怎么办 2018年服装店生意特别差怎么办 打印机拍的照片打出黑怎么办 租的汽车撞了怎么办 神州租车车坏了怎么办 深圳市公安局办保安员证怎么办? 老婆被车撞了后失忆了怎么办 生气引起的短暂失忆怎么办 win10系统忘记开机密码怎么办 戴尔win10密码忘了怎么办 戴尔电脑win10密码忘了怎么办 出门忘记带身份证了怎么办