最新消息:欢迎光临 魔力 • Python!大家可以点开导航菜单中的【学习目录】,这个目录类似图书目录,更加方便学习!

Django2练习项目:开发个人博客系统(6)

Django教程 小楼一夜听春语 5917浏览 0评论

这篇教程我们一起来完成Django2个人博客系统分类页相关的代码编写。

在之前创建导航模板“nav.html”中,我们已经添加了两个分类“Django”和“Python”。

当在浏览器中点击这两个分类的时候,应该能够筛选出相应分类的文章,并且在浏览器中呈现出来。

不过,分类结果页和首页应该有些不同,就是在文章列表上方要有提示当前是什么分类内容的消息。

这个相对于首页额外多处来的消息,需要我们在视图进行处理。

示例代码:

class CategoryList(ListView):
    model = Article
    template_name = 'category.html'
    paginate_by = 5

    def get_queryset(self):  # 定义通过分类查询的QuerySet
        return Article.objects.filter(category=self.kwargs['category']).order_by('-id')  # 按参数传入的分类id进行查询并按文章编号降序排序

    def get_context_data(self, **kwargs):  # 增加额外要传递给模板的数据
        context = super().get_context_data(**kwargs)
        category = Category.objects.get(id=self.kwargs['category'])  # 通过分类id查询分类对象
        context['category'] = category.name  # 将分类对象的名称存入传递给模板的数据中
        return context

然后,添加URL配置。

示例代码:

path('category/<int:category>', blog_view.CategoryList.as_view(), name='category'),

接下来,定义模板内容。

这个模板内容可以从首页模板“index.html”中直接复制,然后添加一些内容。

示例代码:

{% extends 'base.html' %}
{% block title %}分类{% endblock %}
{% block content %}
    <h4> 以下是【{{ category }}】类别的文章:</h4>
    {% for article in page_obj.object_list %}
        <div class="panel panel-default">
            <div class="panel-heading">
                <h3 class="panel-title">
                    <a href="{% url 'detail' article.id %}">{{ article.title }}</a>
                </h3>
            </div>
            <div class="panel-body">
                <p>作者:{{ article.author }} 日期:{{ article.pub_time }}</p>
                <p>{{ article.content|truncatechars:200|striptags }}</p>
                <a class="btn" href="{% url 'detail' article.id %}">进入阅读 »</a>
            </div>
        </div>
    {% endfor %}
    <!--分页条-->
    {% include 'paginator.html' %}
{% endblock %}

上方代码中,标红的部分是新增代码。

当我们完成上述内容,就可以在浏览器中通过分类进行查询了。

转载请注明:魔力Python » Django2练习项目:开发个人博客系统(6)

头像
发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网站 (可选)

网友最新评论 (3)

  1. 头像
    能不能具体解释一下 return Article.objects.filter(category=self.kwargs['category']).order_by('-id') 中category=self.kwargs['category'] 的意思呢?感激不尽!
    yuki6年前 (2018-06-28)回复
    • 小楼一夜听春语
      请仔细阅读注释,另外建议先将Django入门笔记学好,再做博客项目。
      小楼一夜听春语6年前 (2018-06-28)回复
    • 头像
      在models.py文件中,模型类Article中有一个字段category。名字要对应起来,转化成的sql语句才是正确的
      小新5年前 (2019-03-10)回复