这一节将讲述如何添加comments库与ajax的支持。

  一.添加comments库

  comments库是是django框架内置的一个评论库,可以快速的搭建岀一个评论系统,不过再自定义方面有些麻烦,不想用的话也可以自己动手编写。激活comments的方法。

  1.在setting.py INSTALLED_APP 添加

'django.contrib.sites',
django.contrib.comments',

  2.更新数据库,执行

 python manage.py syncdb 

  3.在web目录下urls.py添加以下内容

urlpatterns = patterns('',
...
(r'^comments/', include('django.contrib.comments.urls')),
...
)

  4.在.在setting.py中添加

SITE_ID = 1 #任意一个值

  5.在templates 中使用  comment template tags

  在blog_list.html、blog_filter.html中添加

{% load comments %}

  在blog_list.html、blog_filter.html中添加以下内容

<div class="col-md-2 col-md-offset-7">
<a href="{% url 'updateblog' blog.id %}" title="edit">
<span class="glyphicon glyphicon-edit"></span>
</a>
<a href="{% url 'delblog' blog.id %}" title="delete">
<span class="glyphicon glyphicon-trash"></span>
</a>
{% get_comment_count for blog as comment_count %}
<a href="{% url 'detailblog' blog.id %}#cmt" title="comment">
<span class="glyphicon glyphicon-comment"></span>
{{comment_count}}
</a>
</div>

  二.自定义评论表单

  在blog_show.html中添加以下代码

自定义comments表单
{% block comments %}
<article id="cmt">
{% get_comment_count for blog as comment_count %}
<h4 class="muted comtop">{{ comment_count }} Comments</h4>
<hr class="soften">
{% get_comment_list for blog as blog_com %}
{% for comment in blog_com %}
<div class="container-fluid none-padding">
<p class="muted"><small>{{ comment.user }}</small><small>{{ comment.submit_date|date:"F,j,Y" }}</small></p>
{{ comment.comment }}
</div>
<hr class="soften">
{% endfor %}
</article> <article >
{% get_comment_form for blog as blog_form %}
<div id="comment_form">
<h4 class="muted comtop">New Comments</h4>
<form class="form-horizontal" action="{% comment_form_target %}" method="post">
<fieldset>
{% 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">name: </label>
<div class="controls">
<input type="text" id="id_name" class="input-xlarge" name="name" placeholder="please enter name" required="required">
</div>
</div>
<div class="control-group">
<label class="control-label" for="id_email">email: </label>
<div class="controls">
<input class="input-xlarge" id="id_email" type="email" name="email" placeholder="please enter email" required="required">
</div>
</div>
<div class="control-group">
<label class="control-label" for="id_comment">comment: </label>
<div class="controls">
<textarea class="input-xlarge comment" id="id_comment" name="comment" placeholder="please enter comment" required="required"></textarea>
</div>
</div>
<p style="display:none;"><label for="id_honeypot">如果你在该字段中输入任何内容,那么你的评论就会被视为垃圾评论。</label> <input type="text" name="honeypot" id="id_honeypot"></p>
<div class="form-actions">
<input class="btn btn-info" type="submit" name="submit" value="Post">
{# <input class="btn btn-info" type="submit" name="preview" value="Preview"> #}
<input type='hidden' name='next' value='{% url detailblog blog.id %}'/>
</div>
</fieldset>
</form>
</div>
</article>
{% endblock %}

  修改views.py文件,将blog_show中的

return render_to_response("blog_show.html", {"blog": blog})
改为
return render_to_response("blog_show.html", {"blog": blog}, context_instance=RequestContext(request))

  这样评论功能就完成了。

  三.ajax支持

  修改自定义表单中最后一行(这一行的作用是提交完表单后跳转的页面)

 <input type='hidden' name='next' value='{% url 'detailblog' blog.id %}'/>

  为

<input type='hidden' name='next' value='{% url 'showcomment' blog.id %}'/>

  在url中添加

 url(r'^blog/commentshow/(?P<id>\d+)/$', 'blog_show_comment', name='showcomment'),

  在views.py中添加

def blog_show_comment(request, id=''):
blog = Blog.objects.get(id=id)
return render_to_response('blog_comments_show.html', {"blog": blog})

  新建blog_comments_show.html

{% load comments %}
<article id="cmt">
{% get_comment_count for blog as comment_count %}
<h4 class="muted comtop">{{ comment_count }} Comments</h4>
<hr class="soften">
{% get_comment_list for blog as blog_com %}
{% for comment in blog_com %}
<div class="container-fluid none-padding">
<p class="muted"><small>{{ comment.user }}</small><small>{{ comment.submit_date|date:"F,j,Y" }}</small></p>
{{ comment.comment }}
</div>
<hr class="soften">
{% endfor %}
</article>

  在blog_show.html中添加:

{% block extra_head %}
<script type="text/javascript" charset="utf-8">
function bindPostCommentHandler() {
$('#comment_form form input.submit-preview').remove();
$('#comment_form form').submit(function() {
$.ajax({
type: "POST",
data: $('#comment_form form').serialize(),
url: "{% comment_form_target %}",
cache: false,
dataType: "html",
success: function(html, textStatus) {
$('#cmt').replaceWith(html);
$('#comment_form form')[0].reset();
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
$('#comment_form form').replaceWith('Your comment was unable to be posted at this time. We apologise for the inconvenience.');
}
});
return false;
});
} $(document).ready(function() {
bindPostCommentHandler();
});
</script>
{% endblock %}

    这样就添加了ajax的支持。

django开发简易博客(五)的更多相关文章

  1. django开发简易博客(一)

    这几篇博客是根据GoodSpeed的博客该写的,看了他的博客收获很大,但是他的博客从第三篇开始,条理很不清晰,加之又是几年之前写的,编写环境发生很大改变,所以对他的博客进行了一个整理,加入了一些自己的 ...

  2. django开发简易博客(四)

    上一节,我们讲述了怎么使用静态文件,并使用bootstrap对页面进行了美化,这一节我们将增强我们blog的功能,添加发表博客,删除博客的功能. 一.表单的使用 要实现添加blog的功能,就得使用表单 ...

  3. django 开发简易博客(二)

    这一节我们来了解模板和视图.URL的使用. 一.使用模板 在blog目录中新建templates文件夹,在templates文件夹下新建base.html文件.目录结构如下 templates/ ba ...

  4. django开发简易博客(三)

    一.静态文件的使用 首先,新建static目录,目录下分别建立css.js.img三个子目录 修改settings.py文件 STATICFILES_DIRS = ( 'F:/web/static', ...

  5. Django搭建简易博客

    Django简易博客,主要实现了以下功能 连接数据库 创建超级用户与后台管理 利用django-admin-bootstrap美化界面 template,view与动态URL 多说评论功能 Markd ...

  6. Django开发个人博客入门学习经验贴

    [写在前面] 入门学习搭建个人博客系统首先还是参考大佬们的经验,记得刚入手Django的时候,一篇博客大佬说过一句话,做技术的不要一开始就扎头于细节中,先把握整体框架,了解这个对象之后再去了解细节,进 ...

  7. Django 搭建简易博客

    新增一个 APP 博客算是一个功能集,因此我们应将其体现为一个模块.这表现在 Django 应用里则是为其创建一个 APP Package.现在让 manage.py 中的 startapp 闪亮登场 ...

  8. 实战Django:简易博客Part1

    舍得学习新技能的时候,通常不喜欢傻读书--捧着一本阐述该项技能的书籍,然后傻看,一路看下来,脑子里塞满了新的概念.知识点,头是越来越大,但技能却几乎没掌握半分. 多年来,舍得养成了用做实例来学习新技能 ...

  9. Django开发简单博客流程

    什么是Django? Django是一个基于python的高级web开发框架 它能够让开发人员进行高效且快速的开发 高度集成(不用自己造轮子), 免费并且开源 当前路径创建工程 django-admi ...

随机推荐

  1. javascript 修改css样式

    abc.css CSS code .class1     {    width:10px;    background-color: red;    } HTML code <!DOCTYPE ...

  2. openStack openSource CloudComputing

    <一,> ,OpenStack a few Core Compontents integration with openStack-keystone Identity service1.1 ...

  3. jquery-plugin-biggerLink,highLight-层加亮_andy 阳光生活_百度空间

    How to get the xpath by clicking an html element How to get the xpath by clicking an html element Qu ...

  4. list-style:none outside none;的作用

    今天在论坛里面看到一篇文章,讲的是以前忽略的一个问题.就是当ul里面有float和display:inline,在ie6.ie7里面会有一些问题.一般对ul进行reset也好,或是设置ul的样式时,往 ...

  5. ios sdk的制作

    制作sdk的主要目的是将自己的code通过接口提供给其他应用使用.接下来介绍.a 静态库的制作注意事项: 1.首先.a文件的静态库要进行随时的测试,因此需要将其放入应用中(创建一个应用,再创建一个.a ...

  6. 微信公众号token验证失败的一些总结

    这几天准备弄一个微信公众号,在进行服务器配置的时候出现总是出现token验证失败的报错. 实际上,这个问题很好解决.既然微信平台没有给我们很明确的报错提示,那么我们就可以通过跟踪获取到的请求参数进行分 ...

  7. 发生了Post错误:错误代码40005,微信返回错误信息:invalid file type

    给客户部署 PxxCms, 使用群发功能发送图文的的时候提示: 发生了Post错误:错误代码40005,微信返回错误信息:invalid file type, 没学过php伤不起 ... Google ...

  8. app微信支付服务器端php demo

    class Wxpay { /* 配置参数 */ private $config = array( 'appid' => "wxc92b12277f277355", /*微信 ...

  9. Git merge local repository

    I've met this problem for so many times and let me write a blog for solving this problem. First, you ...

  10. QTP 9.2 下载&破解

    版本不同 但是破解总是这个 crack文件下载 http://ishare.iask.sina.com.cn/f/13802744.html   QTP9.2 下载地址 http://www.duot ...