Django一个BLOG实现(参考)(四)

评论

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

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

(r’^comments/’, include(‘django.contrib.comments.urls’)),

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

列表页

编辑posts/post_list.html:

{% extends ‘base.html’ %}
{% load comments %}
{% block content %}
{% for object in object_list %}
    <hr/>
    {% include ‘posts/_post.html’ %}
    {% get_comment_count for object as comment_count %}
    <small>{{ comment_count }} comment{{ comment_count|pluralize }}</small>
{% endfor %}
{% endblock %}

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

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

内容页

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

{% get_comment_list for object as comment_list %}
<h3>Comments</h3>
{% for comment in comment_list %}
    <div id=”comment_{{ comment.id }}”>
        <p>{{ comment.comment }}</p>
        <small>{{ comment.name }}</small>
    </div>
{% empty %}
    <p>It’s pretty quiet here… be first to comment!</p>
{% endfor %}

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

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

<hr/>
<h3>Your comment</h3>

{% get_comment_form for object as form %}

<form action=”{% comment_form_target %}?next={% url post object.id %}” method=”post”>
    {{ form.content_type }}
    {{ form.object_pk }}
    {{ form.timestamp }}
    {{ form.security_hash }}
    <p style=”display:none”><label for=”id_honeypot”>Leave blank</label>{{ form.honeypot }}</p>
    <p>
        <label for=”id_name”>Name</label>
        {{ form.name }}
    </p>
    <p>
        <label for=”id_comment”>Comment</label>
        {{ form.comment }}
    </p>
    <p><input type=”submit” name=”post” value=”Post” /></p>
</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确实是不错的一个框架,大家值得一试。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值