django开发简易博客(五)
这一节将讲述如何添加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开发简易博客(五)的更多相关文章
- django开发简易博客(一)
这几篇博客是根据GoodSpeed的博客该写的,看了他的博客收获很大,但是他的博客从第三篇开始,条理很不清晰,加之又是几年之前写的,编写环境发生很大改变,所以对他的博客进行了一个整理,加入了一些自己的 ...
- django开发简易博客(四)
上一节,我们讲述了怎么使用静态文件,并使用bootstrap对页面进行了美化,这一节我们将增强我们blog的功能,添加发表博客,删除博客的功能. 一.表单的使用 要实现添加blog的功能,就得使用表单 ...
- django 开发简易博客(二)
这一节我们来了解模板和视图.URL的使用. 一.使用模板 在blog目录中新建templates文件夹,在templates文件夹下新建base.html文件.目录结构如下 templates/ ba ...
- django开发简易博客(三)
一.静态文件的使用 首先,新建static目录,目录下分别建立css.js.img三个子目录 修改settings.py文件 STATICFILES_DIRS = ( 'F:/web/static', ...
- Django搭建简易博客
Django简易博客,主要实现了以下功能 连接数据库 创建超级用户与后台管理 利用django-admin-bootstrap美化界面 template,view与动态URL 多说评论功能 Markd ...
- Django开发个人博客入门学习经验贴
[写在前面] 入门学习搭建个人博客系统首先还是参考大佬们的经验,记得刚入手Django的时候,一篇博客大佬说过一句话,做技术的不要一开始就扎头于细节中,先把握整体框架,了解这个对象之后再去了解细节,进 ...
- Django 搭建简易博客
新增一个 APP 博客算是一个功能集,因此我们应将其体现为一个模块.这表现在 Django 应用里则是为其创建一个 APP Package.现在让 manage.py 中的 startapp 闪亮登场 ...
- 实战Django:简易博客Part1
舍得学习新技能的时候,通常不喜欢傻读书--捧着一本阐述该项技能的书籍,然后傻看,一路看下来,脑子里塞满了新的概念.知识点,头是越来越大,但技能却几乎没掌握半分. 多年来,舍得养成了用做实例来学习新技能 ...
- Django开发简单博客流程
什么是Django? Django是一个基于python的高级web开发框架 它能够让开发人员进行高效且快速的开发 高度集成(不用自己造轮子), 免费并且开源 当前路径创建工程 django-admi ...
随机推荐
- HDU 5820 Lights(扫描线+zkw线段树)
[题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=5820 [题目大意] 在一个大小为50000*50000的矩形中,有n个路灯. 询问是否每一对路灯之 ...
- perl笔记
更精确的空白字符串匹配 1.水平空白字符 Perl5.10之前,使用\s这种分类,不够精确,容易导致意料外的结果: Perl5.10中引入\h字符组,用来匹配任意水平空白字符(包括Unicode字符集 ...
- 深度优先搜索算法(DFS)以及leetCode的subsets II
深度优先搜索算法(depth first search),是一个典型的图论算法.所遵循的搜索策略是尽可能“深”地去搜索一个图. 算法思想是: 对于新发现的顶点v,如果它有以点v为起点的未探测的边,则沿 ...
- node.weiChat
微信的朋友圈分享是现在流行的推广模式,最近两天尝试了一下使用微信进行商品的分享,分享结束后我可以在自己的数据库中查询到用户是否分享成功,包括用户使用微信进行支付时的成功验证.个人觉得微信上的教程有些绕 ...
- swift学习第五章-字典的使用
//以下是关于字典的 //字典的格式[key:value] //字典能够存放基本类型和对象类型的 //声明一个字典 var dictionary1=["key1":"鸭鸭 ...
- 视频主观质量评价工具:MSU Perceptual Video Quality tool
MSU Perceptual Video Quality tool是莫斯科国立大学(Moscow State University)的Graphics and Media Lab制作的一款视频主观评价 ...
- uva 10905 Children's Game (排序)
题目连接:uva 10905 Children's Game 题目大意:给出n个数字, 找出一个序列,使得连续的数字组成的数值最大. 解题思路:排序,很容易想到将数值大的放在前面,数值小的放在后面.可 ...
- Android Intent的几种使用方法全面总结
Intent应该算是Android中特有的东西.你能够在Intent中指定程序要运行的动作(比方:view,edit,dial),以及程序运行到该动作时所须要的资料.都指定好后,仅仅要调用startA ...
- 使用 system.io.filesysteminfo 来查找文件。
如何快速搜索你想找到文件呢.大家知道Windows系统自带了搜索,很方便,下面介绍自己编写的也可以达到同样的效果.注意.有些文件的访问需要更高的权限.这里暂且去掉那些文件目录的搜索.不然会出现erro ...
- BZOJ 1316: 树上的询问( 点分治 + 平衡树 )
直接点分治, 用平衡树(set就行了...)维护. -------------------------------------------------------------------------- ...