将侧边栏制成inclusion_tag

在开发过程中,像侧边栏这种功能的版块,我们在很多页面都需要使用到的时候,我们则需要在视图函数中书写重复的代码,这样很繁琐,我们可以将侧边栏制成inclusion_tag,后面我们需要用到侧边栏功能时,只需要导入即可!

image

将侧边栏制成inclusion_tag的步骤:

1.在应用下创建一个名字必须叫templatetags的文件夹

2.在该文件夹内,创建一个任意名称的py文件

3.在该py文件内,固定写以下两行代码:
    from django import template
    register = template.Library()

自制inclusion_tag文件代码

from django import template
from app01 import models
from django.db.models import Count
from django.db.models.functions import TruncMonth


register = template.Library()

# 自定义inclusion_tag
@register.inclusion_tag('left_menu.html')  # 里面放一个侧边栏的html文件
def left_menu(username):  # username是调用时需要传入的参数
    # 构造侧边栏需要的数据
    user_obj = models.UserInfo.objects.filter(username=username).first()
    blog = user_obj.blog
    # 查出个人站点的分类和分类数
    category_list = models.Category.objects.filter(blog=blog).annotate(count_num=Count('article')).values('name',
                                                                                                          'count_num',
                                                                                                          'pk')
    # print(category_list)
    # 查出个人站点的标签和标签数
    tag_list = models.Tag.objects.filter(blog=blog).annotate(num=Count('article')).values('name', 'num', 'pk')
    # 按照年月统计所有文章
    date_list = models.Article.objects.filter(blog=blog).annotate(month=TruncMonth('create_time')).values(
        'month').annotate(num=Count('id')).values_list('month', 'num')
    # print(date_list)
    return locals()  # 最后需要locals一下

left_menu.html页面创建:

<div class="panel panel-primary">
    <div class="panel-heading">
        <h3 class="panel-title">文章分类</h3>
    </div>
    <div class="panel-body">
        {% for category in category_list %}
            <p><a href="/{{ user_obj.username }}/category/{{ category.2 }}/">{{ category.0 }}({{ category.1 }})</a></p>
        {% endfor %}
    </div>
</div>
<div class="panel panel-success">
    <div class="panel-heading">
        <h3 class="panel-title">文章标签</h3>
    </div>
    <div class="panel-body">
        {% for tag in tag_list %}
            <p><a href="/{{ user_obj.username }}/tag/{{ tag.2 }}">{{ tag.0 }}({{ tag.1 }})</a></p>
        {% endfor %}
    </div>
</div>
<div class="panel panel-info">
    <div class="panel-heading">
        <h3 class="panel-title">日期归档</h3>
    </div>
    <div class="panel-body">
        {% for data in data_list %}
            <p><a href="/{{ user_obj.username }}/archive/{{ data.month|date:'Y-m' }}">{{ data.month|date:'Y年m月' }}({{ data.count_num }})</a></p>
        {% endfor %}
    </div>
</div>

前端页面代码

{% load mytag %}  # 加载自制的inclusion_tag文件
{% left_menu username %} # 加载inclusion_tag函数并传入需要的参数

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:将侧边栏制成inclusion_tag - Python技术站

(0)
上一篇 2023年4月2日 下午4:50
下一篇 2023年4月2日

相关文章

  • 首页轮播图后端接口设计

    逻辑导航 1.当一访问127.0.0.1:8000时,就会向某一地址发送请求2.请求接口需要返回首页所需要的轮播图片3.前端vue轮播图组件循环一下后端发送的图片连接列表,依次展示轮播图 轮播图表设计 轮播图中一些共有的字段,我们可以创建一个公共的基础表,以后需要该字段直接基础该表就行 基表,可以放在自己写的utils.py里,以便后期使用! from dj…

    2023年4月2日
    00
  • python基础(待补充)

    第一篇:计算机的基础知识 编程语言的介绍    计算机介绍和五大组成 平台与软件跨平台介绍 CS、BS架构和网络通信协议 操作系统的介绍 cpu详解 存储器详解 操作系统启动流程和BIOS介绍 关于编辑器和解释型编译型语言 第二篇:python环境的搭建 python介绍和解释器的安装(暂略) python程序的运行方式和步骤 集成开发环境和虚拟环境介绍 第…

    Python开发 2023年4月2日
    00
  • 进程

    1 什么是进程 进程是系统进行资源分配和调度的基本单位,进程表示程序正在执行的过程,是‘活的’,而程序就是一推躺在硬盘上的代码,是‘死的’。 2 进程的调度 1.先来先服务调度算法:对长作业有利,对短作业无利2.短作业优先调度算法:对短作业有利,对长作业无利3.时间片轮转法+多级反馈队列该方法是指,将时间片切成n份,每一份表示一个时间片,这些时间片有一个优先…

    2023年4月2日
    00
  • pycharm操作redis

    安装 在终端环境下输入: pip install redis pycharm操作redis之普通连接 # 1.导入模块 from redis import Redis # 2.实例化产生链接对象 conn = Redis() # 连接本地的redis # conn = Redis(host=”,port=”,password=”,) 连接远程的redi…

    2023年4月2日
    00
  • 一切皆对象和深浅拷贝

    1.元类 元类的来源是:python中一切皆对象。 1.1 什么是元类 元类就是用来实例化产生类的类 关系:元类—实例化—类(自定义的类)—实例化—-对象(obj) 1.2如何查看内置的元类 1.type是内置的元类2.我们用class关键字定义出来的所有类以及内置的类都是由内置的元类type实例化产生的 例如:在python中int、dic…

    2023年4月2日
    00
  • django中CBV视图模式的View源码分析

    位置: 1.找到自己项目用的解释器存储位置H:\pythonProject\Lib\site-packages\django\views\generic\base.py在base.py里有一个View类 2.也可以通过from django.views import View 按住ctrl点击View会直接跳到该类的位置 CBV形式的路由 path(r’^l…

    Python开发 2023年4月2日
    00
  • for循环语法

    for循环 for循环常用来遍历取值! for循环的基本语法 for 变量名 in 可迭代对象: 代码1 代码2 … # 可迭代对象可以是字典、列表、字符串、元组、集合 for + range range是用来控制for循环次数的方法 for i in range(1,9): print(‘====’) # range(1,9)循环1-8次,括号是顾头不…

    Python开发 2023年4月2日
    00
  • 基于tcp协议的套接字通信

    1、套接字socket简介 Socket是应用层与TCP/UDP协议通信的中间软件抽象层,它充当一种接口的角色!封装了传输层以下的东西。 1.1基于tcp的socket通信流程图 2.tcp服务端搭建 需求:模拟两个手机的通话 from ipaddress import IPv4Address import socket # 1.买手机 # socket.A…

    2023年4月2日
    00
合作推广
合作推广
分享本页
返回顶部