inclusion_tag。它多用于一个HTML片段的。例如我写的一个BBS项目中。

一个博主的主页面的左侧栏和查看博主某篇文章的页面的左栅栏的一样的。为了不用重复写同样的代码。且提高页面的扩展性。我的bbs的左侧栏就用了inclusion_tag来实现。

首先要在项目的:

在项目blog这个app下面创建一个templatetags文夹。这个文件夹的名字必顺是templatetags来命名的。然后在此文件夹下自定义一个matag.py文件。

  1.  
    from django import template
  2.  
    from blog import models
  3.  
    from django.db.models import Count
  4.  
     
  5.  
    register=template.Library()
  6.  
    @register.inclusion_tag('left_tag.html')
  7.  
    def left_panel(username):
  8.  
    user_obj = models.UserInfo.objects.filter(username=username).first()
  9.  
    blog = user_obj.blog
  10.  
    # 文章分类
  11.  
    category_article_list = models.Category.objects.filter(blog=blog).annotate(num=Count('article')).values('title', 'num')
  12.  
    # 标签分类
  13.  
    tag_article_list = models.Tag.objects.filter(blog=blog).annotate(num=Count('article')).values('title', 'num')
  14.  
    # 时间分类auth_group
  15.  
    time_archive_list = models.Article.objects.filter(user__username=username).extra(
  16.  
    select={'ym': 'DATE_FORMAT(create_time,"%%Y-%%m")'}
  17.  
    ).values('ym').annotate(num=Count('nid')).values('ym', 'num')
  18.  
     
  19.  
    return {
  20.  
    'username': username,
  21.  
    'category_article_list': category_article_list,
  22.  
    'tag_article_list': tag_article_list,
  23.  
    'time_archive_list': time_archive_list,
  24.  
    }

然后写一个left_tag.html代码块。

  1.  
    <div class="panel panel-primary">
  2.  
    <div class="panel-heading">
  3.  
    <h3 class="panel-title">文章分类</h3>
  4.  
    </div>
  5.  
     
  6.  
    <div class="panel-body">
  7.  
    <ul class="panel-ul">
  8.  
    {% if not category_article_list %}
  9.  
    <li>没有此分类</li>
  10.  
    {% else %}
  11.  
    {% for category_article in category_article_list %}
  12.  
    <li><a href="/blog/{{ username }}/category/{{ category_article.title }}">{{ category_article.title }}({{ category_article.num }})</a></li>
  13.  
    {% endfor %}
  14.  
    {% endif %}
  15.  
    </ul>
  16.  
    </div>
  17.  
    </div>
  18.  
    <div class="panel panel-success">
  19.  
    <div class="panel-heading">
  20.  
    <h3 class="panel-title">标签分类</h3>
  21.  
    </div>
  22.  
    <div class="panel-body">
  23.  
    <ul class="panel_ul">
  24.  
    {% if not tag_article_list %}
  25.  
    <li>没有此分类</li>
  26.  
    {% else %}
  27.  
    {% for tag_article in tag_article_list %}
  28.  
    <li><a href="/blog/{{ username }}/tag/{{ tag_article.title }}">{{ tag_article.title }}({{ tag_article.num }})</a></li>
  29.  
    {% endfor %}
  30.  
    {% endif %}
  31.  
    </ul>
  32.  
    </div>
  33.  
    </div>
  34.  
    <div class="panel panel-info">
  35.  
    <div class="panel-heading">
  36.  
    <h3 class="panel-title">时间归档</h3>
  37.  
    </div>
  38.  
    <div class="panel-body">
  39.  
    <ul class="pane_ul">
  40.  
    {% if not time_archive_list %}
  41.  
    <li>没有此分类</li>
  42.  
    {% else %}
  43.  
    {% for time_archive in time_archive_list %}
  44.  
    <li><a href="/blog/{{ username }}/archive/{{ time_archive.ym }}">{{ time_archive.ym }}({{ time_archive.num }})</a></li>
  45.  
    {% endfor %}
  46.  
    {% endif %}
  47.  
    </ul>
  48.  
    </div>
  49.  
    </div>

最后就简单了。一些页面在需要用到这个左侧栏的就加上下面的一小段代码就好了。

  1.  
    {% load mytag %}
  2.  
    {% left_panel username %}

上面的代码中username是一个参数。

Django模版语言inclusion_tag的用法。的更多相关文章

  1. Django模版语言的复用 1. include标签--模版导入 2.inclusion_tag自定义标签--模版导入 3.母版

    include标签--模版导入 ''' 前提:项目中,往往会出现多个页面拥有一个或几个相同的页面版块,或是一个页面多个页面版块是相同的 如何运用:可以将多个样式标签的集合进行封装,对外提供版块的名字( ...

  2. Django模版语言 格式化显示 后台datatime()时间

    Django模版语言 格式化显示 后台datatime()时间 场景描述:

  3. django -- 模版语言之过滤器Filters和for循环

    前戏 在前面写的图书管理系统中,我们对模版语言应该已经不陌生了,使用{{ }}包裹起来的就是模版语言,只需要记住两种就可以了 {{ 变量名 }}            变量相关的 {% %}      ...

  4. Django 模版语言详解

    一.简介 模版是纯文本文件.它可以产生任何基于文本的的格式(HTML,XML,CSV等等). 模版包括在使用时会被值替换掉的 变量,和控制模版逻辑的 标签. 例: {% extends "b ...

  5. Django 模版语言

    传入变量 {{ 变量名 }} 在 view.py 的函数返回 render 时在html文件名后传入一个字典,字典的 key 对应html文件中的变量名,value 为传入的值 views.py: d ...

  6. Django模版语言自定义标签-实现前端 关联组合过滤查询

    前端关联 组合过滤查询 实现效果如图: models.py 创建表代码 from django.db import models # Create your models here. class Le ...

  7. Django - 模版语言循环字典

    1.可以对传入字典参数做循环显示 views.py中代码: urls.py中代码: html中代码: 在模版语言中,可以对字典进行类似python中的操作(keys,values,items),需要注 ...

  8. 第三章:模版层 - 1:Django模板语言详解

    本节将介绍Django模版系统的语法.Django模版语言致力于在性能和简单性上取得平衡. 如果你有过其它编程背景,或者使用过一些在HTML中直接混入程序代码的语言,那么你需要记住,Django的模版 ...

  9. Django模板语言详解

    本节将介绍Django模版系统的语法.Django模版语言致力于在性能和简单性上取得平衡. 如果你有过其它编程背景,或者使用过一些在HTML中直接混入程序代码的语言,那么你需要记住,Django的模版 ...

随机推荐

  1. java生成棋盘

    第一步:新建java项目,具体的命名,看下面的文件结构. 第二步:代码区 DrawChessBoard类: package com.hp.chenyanlong; import java.awt.Gr ...

  2. d3浅谈

    d3是一个及其庞大的库,有20个模块,大小也达到了216kb,是JQ1.x的2倍多,JQ3.x的3倍多,JQ本来就挺笨重的一个库,d3更是如此,但是它的功能确实很强悍~ d3的定位是一个科学计算库,并 ...

  3. LSTM介绍

    转自:https://blog.csdn.net/gzj_1101/article/details/79376798 LSTM网络 long short term memory,即我们所称呼的LSTM ...

  4. vue 使用v-cloak让在页面加载时不显示{{}}花括号

    官方说法: 这个指令保持在元素上直到关联实例结束编译. 和 CSS 规则如 [v-cloak] { display: none } 一起用时,这个指令可以隐藏未编译的 Mustache 标签直到实例准 ...

  5. the error about “no such file or directory”

    CHENYILONG Blog the error about "no such file or directory" when you get the question like ...

  6. django错误笔记——1242 Subquery returns more than 1 row

    在数据库查询操作过程中,子查询结果不唯一,导致外面的查询无法进行. 我的错误语句: rid = models.User.objects.filter(username=username).values ...

  7. git 入门常用命令(转)

    Git工作流程:D:\projects\Setup2\Setup2\Setup2\Express\SingleImage\DiskImages\DISK1 git clone工作开始之初,可通过git ...

  8. Python_oldboy_自动化运维之路_面向对象(十)

    面向对象编程 OOP编程是利用“类”和“对象”来创建各种模型来实现对真实世界的描述,使用面向对象编程的原因一方面是因为它可以使程序的维护和扩展变得更简单,并且可以大大提高程序开发效率 ,另外,基于面向 ...

  9. nginx开启gzip压缩前端css,js

    利用nginx实现前后端分离, nginx配置文件,nginx.conf配置采用gzip压缩: 在server中添加: gzip on; #开启gzip gzip_min_length 1k; #低于 ...

  10. CMD命令行下修改网络IP设置的方法

    1.全自动修改网络地址: 复制代码 代码如下: @echo off netsh interface ip set address name="本地连接" static 192.16 ...