这一节将讲述如何添加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. 由Mifare 1卡破解带来的危险以及应对方法

    今年年初以来,一个消息的传出震惊了整个IC卡行业.最近,德国和美国的研究人员成功地破解了NXP的Mifare1芯片的安全算法.Mifare1芯片主要用于门禁系统访问控制卡,以及一些小额支付卡,应用范围 ...

  2. JSP打印九九乘法表

    ##index.jsp: <%@ page language="java" import="java.util.*" pageEncoding=" ...

  3. 脑波设备mindwave数据流二次开发示例

    数据流开发神念科技提供了两个文件ThinkGearStreamParse.h和ThinkGearStreamParse.cpp两个文件,主要接口为: 宏定义: /* Data CODE definit ...

  4. 利用 XPath-jQuery 集锦手册在 XPath 和 jQuery 之间做选择

    利用 XPath-jQuery 集锦手册在 XPath 和 jQuery 之间做选择 利用 XPath-jQuery 集锦手册在 XPath 和 jQuery 之间做选择

  5. MyEclipse13中修改Servlet.java源代码

    Servlet.java源代码想要修改的步骤,与低版本的不同废话少说,直接来步骤: 1,在myEclipse的安装目录中搜索com.genuitec.eclipse.wizards文件,如图:选择co ...

  6. c++程序内存泄露检測工具

    功能: 用于检測c++程序的内存泄露. 原理: 事实上非常easy,就是通过函数的重载机制,捕获应用程序的new, new[] , delete , delete[], malloc,calloc,f ...

  7. telnet登陆路由器。。。

    登陆路由有两种方式.一种是console,还有一种是使用telnet,由于我电脑是win7,不支持console.也懒得装软件,就使用telnent为例. 一.开启telnetclient 对于XP. ...

  8. HDU1046:Gridland

    Problem Description For years, computer scientists have been trying to find efficient solutions to d ...

  9. 在 win 10 中使用sql 2012 附加低版本数据失败的解决办法。

    随着win 10 的发布,我也尝试把自己的笔记本升级下,体验win10,由于自己电脑好长时间没有管理过,东西比较乱,一激动就格式了硬盘.但是所有的资料都丢失了,不过我都提前备份到网盘上.好了,废话不多 ...

  10. python的内置函数bin()

    bin(x) 中文说明:将整数x转换为二进制字符串,如果x不为Python中int类型,x必须包含方法__index__()并且返回值为integer: 参数x:整数或者包含__index__()方法 ...