我现在说的django,版本是1.0以后的,因为我用的是svn版的,内容可能不适用于0.96版。
django自带了很多东西(app),都在它的contrib目录下,有的真的是很好很强大的。比如说admin,sites,generic_views等等,当然我下面要说的comments也是很强的,用过的人都知道,没有用过的或者不知道的人也有很多。
django官网上有一篇针对comments的文章可以借鉴,名字是Using Django's Free Comments,链接是:http://code.djangoproject.com/wiki/UsingFreeComment
希望看这篇文章的人先去看看上面的文章打个底。不过我要提醒大家的是,到目前为止,上面的那篇文章还不适应现在的django版本(1.0),因为1.0版的django中已经没有了FreeComments了!!!!,FreeComments已经变成了Comments,这个就像new forms没有了,forms出现了是一样的。
未完待续。。。
2008-10-11 12:38:41 增加
一、首先在INSTALLED_APPS增加
INSTALLED_APPS = (
......
'django.contrib.comments',
)
二、增加之后,注意更新你的数据库执行: manage.py syncdb
三、然后在urls.py中增加:
# user django comments system
(r'^comments/', include('django.contrib.comments.urls')),
四、修改你的模板.
以blog为例,假设你的blog的models定义中储存文章的类是Entry:
例如blog/models.py
- class Entry(models.Model):
- title = models.CharField(max_length=200)
- pub_date = models.DateTimeField('date published',default='2008-10-09',blank=True)
- content = models.TextField()
那么,你的view如何显示呢,我用通用views吧,就是generic_view,这样显示单个blog的时候就是渲染blog模板中的blog/entry_detail.html
在你的blog/entry_detail.html,可以这样用comments:
1.加载comments的tags:
{% load comments %}
2.显示与客户访问的单篇blog相关的comments.下面给出我的blog/entry_detail.html模板吧,这样好说明一些:
- {% extends "base.html" %}
- {% load comments %}
- {% block title %}Blog - {{ object.title|escape }}{% endblock %}
- {% block content %}
- <h1>{{ object.title|escape }}</h1>
- <dl>
- <dt>Posted On:{{ object.pub_date|date:"F j, Y" }}</dt>
- <dd>Tags:
- {% for tag in object.tags.all %}
- <a href="{{ tag.get_absolute_url }}">{{ tag.name }}</a>{% if not forloop.last %}, {% endif %}
- {% endfor %}
- </dd>
- </dl>
- <div class="opt">
- <div><pre>
- {{ object.content|escape|linebreaks }}
- </pre></div>
- {% get_comment_count for object as comment_count %}
- <div class="editUsr" align="right">(责任编辑:#)</div>
- <div class="clearBOX"> </div>
- <div class="newsComment">[<a href=""#send"" target="_blank">我来说两句</a><span id="commentAllCountin">({{ comment_count }}条)</span>]</div>
- </div>
- <div class='more'>类别:<a href="" title="查看该分类中所有文章">python & django & gae</a>
- | <a title="将此文章添加到搜藏" href="/cang/add" onClick="return addToFavor();" target="_blank">添加到搜藏</a>
- | 浏览(<span id="result"></span>)
- </div>
- <div style="height:5px;line-height:5px;"> </div>
- <div id="in_nav">
- 上一篇:<a href="before" title="">比这新的信息 </a>
- 下一篇:<a href="after" title="">比这 </a>
- </div>
- </div>
- {% endblock %}
注意上面的代码:
{% get_comment_count for object as comment_count %}这一句是取出该object(就是客户访问的blog)的评论数,并赋值给comment_count这个参数,在后面,({{ comment_count }}条)中就使用了这个变量.
如果该篇blog有评论了,你要显示它们,该如何做呢,请在模板中用下面的代码:
{% get_comment_list for object as comment_list %}
{% for comment in comment_list %}
<p>{{comment.user_name}}:{{comment.comment}}</p>
{% endfor %}
如果你想给用户显示一个添加评论的form表单,就在模板中这样做:
<div id='commentform'>
<h2>发表你的评论:</h2>
{% render_comment_form for object %}
</div>
如果你需要客户必须登录才能显示该发布评论的表单,你就要这样做:
{% if user.is_authenticated %}
<h2>发表你的评论:</h2>
{% render_comment_form for object %}
{% else %}
您好,朋友,请 <a href="/accounts/login/">登录</a> ,或者 <a href="/accounts/register/">注册</a>后,再发表评论
{% endif %}
以上代码我在xp上测试通过。使用的是django 1.0的版本。给大家一个参考吧。