Django模版语言inclusion_tag的用法。
inclusion_tag。它多用于一个HTML片段的。例如我写的一个BBS项目中。
一个博主的主页面的左侧栏和查看博主某篇文章的页面的左栅栏的一样的。为了不用重复写同样的代码。且提高页面的扩展性。我的bbs的左侧栏就用了inclusion_tag来实现。
首先要在项目的:
在项目blog这个app下面创建一个templatetags文夹。这个文件夹的名字必顺是templatetags来命名的。然后在此文件夹下自定义一个matag.py文件。
- from django import template
- from blog import models
- from django.db.models import Count
- register=template.Library()
- @register.inclusion_tag('left_tag.html')
- def left_panel(username):
- user_obj = models.UserInfo.objects.filter(username=username).first()
- blog = user_obj.blog
- # 文章分类
- category_article_list = models.Category.objects.filter(blog=blog).annotate(num=Count('article')).values('title', 'num')
- # 标签分类
- tag_article_list = models.Tag.objects.filter(blog=blog).annotate(num=Count('article')).values('title', 'num')
- # 时间分类auth_group
- time_archive_list = models.Article.objects.filter(user__username=username).extra(
- select={'ym': 'DATE_FORMAT(create_time,"%%Y-%%m")'}
- ).values('ym').annotate(num=Count('nid')).values('ym', 'num')
- return {
- 'username': username,
- 'category_article_list': category_article_list,
- 'tag_article_list': tag_article_list,
- 'time_archive_list': time_archive_list,
- }
然后写一个left_tag.html代码块。
- <div class="panel panel-primary">
- <div class="panel-heading">
- <h3 class="panel-title">文章分类</h3>
- </div>
- <div class="panel-body">
- <ul class="panel-ul">
- {% if not category_article_list %}
- <li>没有此分类</li>
- {% else %}
- {% for category_article in category_article_list %}
- <li><a href="/blog/{{ username }}/category/{{ category_article.title }}">{{ category_article.title }}({{ category_article.num }})</a></li>
- {% endfor %}
- {% endif %}
- </ul>
- </div>
- </div>
- <div class="panel panel-success">
- <div class="panel-heading">
- <h3 class="panel-title">标签分类</h3>
- </div>
- <div class="panel-body">
- <ul class="panel_ul">
- {% if not tag_article_list %}
- <li>没有此分类</li>
- {% else %}
- {% for tag_article in tag_article_list %}
- <li><a href="/blog/{{ username }}/tag/{{ tag_article.title }}">{{ tag_article.title }}({{ tag_article.num }})</a></li>
- {% endfor %}
- {% endif %}
- </ul>
- </div>
- </div>
- <div class="panel panel-info">
- <div class="panel-heading">
- <h3 class="panel-title">时间归档</h3>
- </div>
- <div class="panel-body">
- <ul class="pane_ul">
- {% if not time_archive_list %}
- <li>没有此分类</li>
- {% else %}
- {% for time_archive in time_archive_list %}
- <li><a href="/blog/{{ username }}/archive/{{ time_archive.ym }}">{{ time_archive.ym }}({{ time_archive.num }})</a></li>
- {% endfor %}
- {% endif %}
- </ul>
- </div>
- </div>
最后就简单了。一些页面在需要用到这个左侧栏的就加上下面的一小段代码就好了。
- {% load mytag %}
- {% left_panel username %}
上面的代码中username是一个参数。
Django模版语言inclusion_tag的用法。的更多相关文章
- Django模版语言的复用 1. include标签--模版导入 2.inclusion_tag自定义标签--模版导入 3.母版
include标签--模版导入 ''' 前提:项目中,往往会出现多个页面拥有一个或几个相同的页面版块,或是一个页面多个页面版块是相同的 如何运用:可以将多个样式标签的集合进行封装,对外提供版块的名字( ...
- Django模版语言 格式化显示 后台datatime()时间
Django模版语言 格式化显示 后台datatime()时间 场景描述:
- django -- 模版语言之过滤器Filters和for循环
前戏 在前面写的图书管理系统中,我们对模版语言应该已经不陌生了,使用{{ }}包裹起来的就是模版语言,只需要记住两种就可以了 {{ 变量名 }} 变量相关的 {% %} ...
- Django 模版语言详解
一.简介 模版是纯文本文件.它可以产生任何基于文本的的格式(HTML,XML,CSV等等). 模版包括在使用时会被值替换掉的 变量,和控制模版逻辑的 标签. 例: {% extends "b ...
- Django 模版语言
传入变量 {{ 变量名 }} 在 view.py 的函数返回 render 时在html文件名后传入一个字典,字典的 key 对应html文件中的变量名,value 为传入的值 views.py: d ...
- Django模版语言自定义标签-实现前端 关联组合过滤查询
前端关联 组合过滤查询 实现效果如图: models.py 创建表代码 from django.db import models # Create your models here. class Le ...
- Django - 模版语言循环字典
1.可以对传入字典参数做循环显示 views.py中代码: urls.py中代码: html中代码: 在模版语言中,可以对字典进行类似python中的操作(keys,values,items),需要注 ...
- 第三章:模版层 - 1:Django模板语言详解
本节将介绍Django模版系统的语法.Django模版语言致力于在性能和简单性上取得平衡. 如果你有过其它编程背景,或者使用过一些在HTML中直接混入程序代码的语言,那么你需要记住,Django的模版 ...
- Django模板语言详解
本节将介绍Django模版系统的语法.Django模版语言致力于在性能和简单性上取得平衡. 如果你有过其它编程背景,或者使用过一些在HTML中直接混入程序代码的语言,那么你需要记住,Django的模版 ...
随机推荐
- ElasticStack系列之十七 & 大文本搜索性能提升方案
1. 什么是大文本?具体是什么? 首先需要理解,ElasticSearch 建立索引完成全文检索的前提是将待检索的信息导入到 ElasticSearch 中.而有的信息对应的正文内容会非常的打,可能达 ...
- Eclipse的一些常用的快捷键
写代码的时候常用的: Ctrl + 鼠标左键: 进入函数定义,变量声明: Alt + ←: 回到上次编辑的地方, 同理 Alt + → 可以移回来 Ctrl + O: 查找当前类的所有函数,变量 Ct ...
- Mac安装WineHQ
下载: (链接: https://pan.baidu.com/s/1o7NPhNk 密码: 5227) 安装: 先决条件: XQuartz>=2.7.7 系统设置允许未签名的包. 在https: ...
- AngularJS入门基础——表达式
表达式在AngularJS应用中广泛的使用,因此深入理解AngularJS如何使用并运算表达式是非常重要的. 表达式和eval非常相似,但是由于表达式由AngularJS来处理,它们有已下显著不同 ...
- HDU 4472 Count DP题
解题报告:题目大意,给你n个球,要将这n个球从下到上按层次排列,要求同一个层次的的每一个分支的数量都必须相等,问有多少种排列的方法. 此题的一个DP题,假设现在有n个球,要将这n个球排列好,我们就必须 ...
- HDU 2066 一个人的旅行 最短路问题
题目描述:输入的第一行有三个数,T,S,D,T表示一共有多少条线路,S表示起点的个数,D表示终点的个数,接下来就是输入T条路的信息了,要你判断从多个起点中任意一个到多个终点中的任意的一个的最短距离是多 ...
- 运动规划——PT and PVT 模式
最近项目成员在做机器人上层开发时,经常说到PT模式和PVT模式.一直没搞懂这两种模式的实际差别.上网检索进行学习...... ref link:https://blog.csdn.net/m0_376 ...
- linux系统时间不同步解决办法(同步本地时间)
改变/etc/目录下的localtime文件,既可以改变当前的时区 1.方法是到/usr/share/zoneinfo目录下找到你要相对应的时区文件,例如上海在/usr/share/zoneinfo/ ...
- python enumerate用法总结【转】
enumerate()说明 enumerate()是python的内置函数 enumerate在字典上是枚举.列举的意思 对于一个可迭代的(iterable)/可遍历的对象(如列表.字符串),enum ...
- 从TFS 删除工作项
一.进入命令执行窗口的方式 1.若你的TFS服务器上安装了VS开发工作,可以按以下步骤,进入命令行方式,图如下: 2.若你TFS上没有安装VS开发工作,可以从你的开发机器上的VS安装目录下(一般情况下 ...