将侧边栏制成inclusion_tag

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

将侧边栏制成inclusion_tag

将侧边栏制成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">&#x6587;&#x7AE0;&#x5206;&#x7C7B;</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">&#x6587;&#x7AE0;&#x6807;&#x7B7E;</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">&#x65E5;&#x671F;&#x5F52;&#x6863;</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&#x5E74;m&#x6708;' }}({{ data.count_num }})</a></p>
        {% endfor %}
    </div>
</div>

前端页面代码

{% load mytag %}  # &#x52A0;&#x8F7D;&#x81EA;&#x5236;&#x7684;inclusion_tag&#x6587;&#x4EF6;
{% left_menu username %} # &#x52A0;&#x8F7D;inclusion_tag&#x51FD;&#x6570;&#x5E76;&#x4F20;&#x5165;&#x9700;&#x8981;&#x7684;&#x53C2;&#x6570;

Original: https://www.cnblogs.com/suncolor/p/16746916.html
Author: 等日落
Title: 将侧边栏制成inclusion_tag

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/612707/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Redis学习

    Redis 因为没有指定配置文件 需配置 redis-server redis.windows.conf 之后自动启动 测试性能 redis-benchmark -p 6379 -…

    数据库 2023年6月16日
    078
  • VMware下的centOS安装与异常记录

    VMware下的centOS安装与异常记录 随笔 记录在使用虚拟机安装centOs的过程中遇到的一些坑,记录一下,之前发在C**N上的,现在决定在这里重新整理一下,加上一些细节的补…

    数据库 2023年6月6日
    0117
  • 三分钟图解 MVCC,看一遍就懂

    前文我们介绍了 InnoDB 存储引擎在事务隔离级别 READ COMMITTED 和 REPEATABLE READ(默认)下会开启一致性非锁定读,简单回顾下:所谓一致性非锁定读…

    数据库 2023年5月24日
    088
  • leetcode 617. Merge Two Binary Trees 合并二叉树(简单)

    一、题目大意 给你两棵二叉树: root1 和 root2 。 想象一下,当你将其中一棵覆盖到另一棵之上时,两棵树上的一些节点将会重叠(而另一些不会)。你需要将这两棵树合并成一棵新…

    数据库 2023年6月16日
    074
  • Python–模块Module

    1、定义模块:用来从逻辑上组织python代码(变量,函数,类,逻辑:实现一个功能),本质就是.py结尾的python文件,(文件名:test.py,对应的模块名test)包:用来…

    数据库 2023年6月9日
    089
  • 吃饱年代

    Original: https://www.cnblogs.com/life2refuel/p/15211899.htmlAuthor: 喜欢兰花山丘Title: 吃饱年代

    数据库 2023年6月9日
    0114
  • Go编译过程

    一、 Go编译流程 二、过程说明 词法解析 读取Go源文件,将字符序列转换为符号(token)序列,比如将”:=”转换为_Define 代码中的标识符、关键…

    数据库 2023年6月14日
    080
  • Django配置日志功能

    Django配置日志功能 LOGGING = { ‘version’: 1, ‘disable_existing_loggers’: False, # 是否禁用已经存在的日志器 ‘…

    数据库 2023年6月14日
    0101
  • MySQL中实现中文转拼音

    — 插入数据 INSERT INTO t_base_pinyin ( pin_yin_, code_ ) VALUES ( "a", 20319 ),( &q…

    数据库 2023年5月24日
    072
  • Java 考试系统项目源码 springboot mybaits vue.js 支持手机端考试

    新增功能:培训学习模块, PDF电子课程、视频课程、直播课程(自己搭建直播流服务器) 人脸识别(考试时验证,有开关)、补考开关 组建试卷:创建试卷,题目、类型、总分、及格分数、时长…

    数据库 2023年6月6日
    083
  • html学习笔记

    学完html基本以后,现在对html知识做以下总结: 以上内容来源于bilibiliup狂神说 html html,即超文本标记语言(Hyper Text Markup Langu…

    数据库 2023年6月14日
    089
  • OA系统模块设计方案

    `1.模型管理 :web在线流程设&#x…

    数据库 2023年6月6日
    079
  • DB审核查询平台Archery–安装部署可能遇到的问题

    Archery是archer的分支项目,定位于SQL审核查询平台,旨在提升DBA的工作效率,支持多数据库的SQL上线和查询,同时支持丰富的MySQL运维功能,所有功能都兼容手机端操…

    数据库 2023年6月16日
    085
  • mysql 常用的命令2

    找出每个部门,不同工作岗位的最高薪资。 mysql> select deptno,job,max(sal) from emp group by deptno,job; +&#…

    数据库 2023年5月24日
    071
  • JUC学习笔记(八)

    JUC学习笔记(一)https://www.cnblogs.com/lm66/p/15118407.htmlJUC学习笔记(二)https://www.cnblogs.com/lm…

    数据库 2023年6月6日
    090
  • Postman安装及汉化

    1. 安装postman 各位根据各自需要可以参考下表自行下载,把链接内的”版本号”替换为指定的版本号 操作系统 下载链接 Windows64位 Windo…

    数据库 2023年6月14日
    0101
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球