大家好,这是皮爷给大家带来的最新的学习Python能干啥?之Django教程,从零开始,到最后成功部署上线的项目。这一节,我们将打磨首页的文章列表展示问题。
上一节,我们把文章详情页弄好了,这一章节,我们把首页弄好,即首页的文章列表。
我们之前设计的首页,长这个样子:
可以看到,首页分为顶部四个大的推荐图,还有下面的文章列表,今天的任务就是要将这几个地方补全。
怎样才能补全呢?我们可以分为以下几步:
那么我们就先第一步,填充文章。
这里简单说明一下文章:
is_in_main_page
为true,权重100;is_in_main_page
为true,权重99;is_in_main_page
为true,权重98;is_in_main_page
为true,权重97;接下来,我们就要修改视图函数了,修改index视图函数:
def index(request):
top_post = Post.objects.filter(is_main_page=True).order_by('-priority')
list_post = Post.objects.filter(is_main_page=False)
context = {
'top_post': top_post,
'list_post': list_post
}
return render(request, 'post/index.html', context=context)
这里我们看到,我们将首页的四个位置通过is_main_page
是否为True来来判断是否是在顶部的四个位置,同时,他们的排放顺序是按照priority的数值从大到小排列。其他的数据,则是会放在list_post
里面。
视图函数已经写好,接下来我们就要修改html文件了。通过Django的DTL里面的if标签来判断数据,来填充数据:
<div class="col-md-8">
{% if top_post %}
{% if top_post.0 %}
<div class="row" style="height: 230px;background-color: white">
<div class="col-md-7 p-0 h-100">
<a href="{% url 'post:detail' time_id=top_post.0.time_id%}" class="w-100 h-100">
<img src="{{ top_post.0.thumbnail }}" class="w-100 h-100">
a>
div>
<div class="col-md-5">
<p class="h5 mt-3 border-bottom mb-0 pb-2"><a href="{% url 'post:detail' time_id=top_post.0.time_id%}" class="text-decoration-none text-dark" style="">{{ top_post.0.title }}a>
p>
<div class="d-flex flex-row justify-content-between mt-2">
<p class="font-weight-light small pl-1 ">{{ top_post.0.author.username }}p>
<p class="font-weight-light small pr-1">{{ top_post.0.publish_time_show | datapicker_format }}p>
div>
<p class="small" style="font-size: 95%;">{{ top_post.0.description }}p>
div>
div>
{% endif %}
<div class="row mt-2 justify-content-between" style="height: 130px;">
{% if top_post.1 %}
<div class="col-sm-4 pl-0 pr-1 position-relative h-100">
<a href="{% url 'post:detail' time_id=top_post.1.time_id%}" class="w-100 h-100">
<img src="{{ top_post.1.thumbnail }}" class="w-100 h-100">
<div class="position-absolute mr-1" style="bottom:0;background-color: rgba(58,58,58,0.5)">
<p class="small m-1 text-light">
{{ top_post.1.title }}
p>
div>
a>
div>
{% endif %}
{% if top_post.2 %}
<div class="col-sm-4 pl-1 pr-1 position-relative h-100">
<a href="{% url 'post:detail' time_id=top_post.2.time_id%}" class="w-100 h-100">
<img src="{{ top_post.2.thumbnail }}" class="w-100 h-100">
<div class="position-absolute mr-1" style="bottom:0;background-color: rgba(58,58,58,0.5)">
<p class="small m-1 text-light">
{{ top_post.2.title }}
p>
div>
a>
div>
{% endif %}
{% if top_post.3 %}
<div class="col-sm-4 pl-1 pr-0 position-relative h-100">
<a href="{% url 'post:detail' time_id=top_post.3.time_id%}" class="w-100 h-100">
<img src="{{ top_post.3.thumbnail }}" class="w-100 h-100">
<div class="position-absolute" style="bottom:0;background-color: rgba(58,58,58,0.5)">
<p class="small m-1 text-light">
{{ top_post.3.title }}
p>
div>
a>
div>
{% endif %}
div>
{% endif %}
<div class="row mt-3">
<ul class="col-sm-12 d-block">
{% for post in list_post %}
<li class="row mb-3" style="height: 180px;background-color: white">
<div class="col-sm-4 p-3 h-100">
<a href="{% url 'post:detail' time_id=post.time_id %}" class="w-100 h-100">
<img src="{{ post.thumbnail }}" class="w-100 h-100">
<div class="position-absolute mt-3"
style="top:0;background-color: rgba(32,120,255,0.5)">
<p class="small m-1 text-light">{{ post.category.name }}p>
div>
a>
div>
<div class="col-sm-8 d-flex flex-column">
<p class="h5 mt-3 border-bottom mb-0 pb-2">
<a href="{% url 'post:detail' time_id=post.time_id %}" class="text-decoration-none text-dark">{{ post.title }}
a>
p>
<p class="small mt-2" style="font-size: 95%;">{{ post.description }}p>
<div class="d-flex flex-row justify-content-between mt-auto">
<p class="font-weight-light small pl-1 mb-3">{{ post.author.username }}p>
<p class="font-weight-light small pr-1 mb-3">阅读({{ post.read_num }})p>
<p class="font-weight-light small pr-1 mb-3">{{ post.publish_time_show | datapicker_format }}p>
div>
div>
li>
{% endfor %}
ul>
div>
div>
上文可以看到,我们需要注意这么几点:
top_post
没有数据的时候,就不显示;{% url 'post:detail' time_id=top_post.0.time_id%}
通过最后time_id=xxx
的方式传值;list_post
的数据进行显示。好了,全部做完之后,最后我们运行服务,来看一下我们的首页:
很完美,点击每一篇文章,都能跳转到不同的文章详情页。颇费!
最后总结一下,
首页页面接入文章数据:
{% url 'post:detail' time_id=xxx.time_id %}
来传递;整套教程源码获取,可以关注『皮爷撸码』,回复『peekpa.com』