• 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的支持。

  • 相关阅读:
    pycharm上传代码到码云(详细)
    我是如何理解ThreadLocal
    前两次成绩汇总
    第五次作业
    第四次作业
    第三次作业
    第二次作业
    第一次作业
    单例模式之懒汉式与饿汉式
    浅谈对srping框架的理解
  • 原文地址:https://www.cnblogs.com/fireflow/p/4716287.html
Copyright © 2020-2023  润新知