一、帖子中心区域是 <div class="container">

(1)在里面实现一个 <div class="row">,包含左右两个小模块区:<div class="col-md-8 left-content-panel">  和 <div class="col-md-4 right-sidebar">

    

    其中用 django内置的 class="row",可以使两个左右模块在一行显示,col-md-8,col-md-4 分别表示左右的横向宽度(总共是12)


(2)在 左模块区 left-content-panel里,放的是帖子列表,建一个<div class="content-box">

    {% for article in articles %} 循环显示所有article,再一次横向显示图片和文章,

    新建一个<div class="article-box row">,把循环结果放入这个<div> 里,

    包含 <div class="article-head-img col-md-3"> 和<div class="article-summary col-md-8">,


(3)右侧文章区域,标题建立一个链接

    <h4><a href="{% url 'article_detail' article.id %}">` article`.`title `</a></h4>

    标题下面,建立 <div class="artcile-attr">,显示文章属性,

    要一行显示 使用<ul class="list-inline">,如:<li>` article`.`auther`.`name `</li>

    

    不是同一张表的信息,使用

    <li>thumbup: ` article`.`thumbup_set`.`select_related`.`count `</li>


(4)因为每个帖子之间要分割,所以最后加上 <hr/>


    <div class="container">
        {% block page-container %}
            <div class="row">
                <div class="col-md-8 left-content-panel">
                    <div class="content-box">
                        {% for article in articles %}
                            <div class="article-box row">
                                <div class="article-head-img col-md-3">
                                    <img src="/static/imgs/test.jpg">
                                </div>
                                <div class="article-summary col-md-8">
                                    <h4><a href="{% url 'article_detail' article.id %}">{{ article.title }}</a></h4>
                                    <div class="artcile-attr">
                                        <ul class="list-inline">
                                            <li>{{ article.auther.name }}</li>
                                            <li>{{ article.publish_date }}</li>
                                            <li>thumbup: {{ article.thumbup_set.select_related.count }}</li>
                                            <li>comment: {{ article.comment_set.select_related.count }}</li>
                                        </ul>
                                    </div>
                                    <p>{{ article.summary }}</p>
                                </div>
                            </div>
                            <hr/>
                        {% endfor %}

                    </div>
                </div>
                <div class="col-md-4 right-sidebar">
                    bar
                </div>
            </div>
        {% endblock %}

    </div> <!-- /container -->



二、在展示帖子信息时,遇到一个问题,之前建模的时候,文章表里面没有一个列是表示文章简介的,所以现在要加上去


models.py 加入

class Article(models.Model):
summary = models.CharField(max_length=255)

再执行

python manage.py makemigrations 

python manage.py migrate 



三、index.html里面使用的新样式,需要自己编辑

css目录下新建custom.css

.left-content-panel{
    border: 2px solid crimson;
}

.right-sidebar{
    border: 2px solid black;
}

.article-head-img img{
    height: 125px;
    width: 200px
}

.article-summary{
    margin-left: 20px;
}


然后在index.html里面加入

    <!-- Custom styles for this template -->

    <link href="/static/bootstrap/css/custom.css" rel="stylesheet">



四、之前在文章列表里,每个标题都加了超链接,点击跳转每个文章详细信息


url.py

    url(r'^article/(\d+)/$',views.article_detail,name="article_detail")


views.py

from django.core.exceptions import ObjectDoesNotExist

def article_detail(request,article_id):
    try:
        article_obj = models.Article.objects.get(id=article_id)
    except ObjectDoesNotExist as e:
        return render(request,'404.html',{'err_msg':u"文章不存在!"})
    return render(request,'article.html',{'article_obj':article_obj})


templates里面新建

404.html

{% extends 'index.html' %}

{% block page-container %}
    <h1 style="font-size: 200px" >404</h1>
    <h3>{{ err_msg }}</h3>
{% endblock %}


article.html

{% extends 'index.html' %}

{% block page-container %}
    <div class="artile-detail"></div>
        <h4>{{ article_obj.title }}</h4>
        <p>{{ article_obj.content }}</p>
{% endblock %}