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. vue-cli内部webpack的打包优化

    在此之前,我们先谈谈前端项目的性能优化. 优化前端项目无非就是2方面的优化: 一.网络性能优化(重点) 减少请求数量(webpack的天职就是打包) 减少请求资源大小(压缩gzip,后端会完成) CD ...

  2. SqlParameter防止SQL注入

    SQL注入的解决方案有好几种,待我细细研究过之后逐一讲解. 方法一:SqlParameter方法 这里有一篇博客是详细介绍SqlParameter的,可以看看 点我 string sqlStr=&qu ...

  3. docker 时区设置

    今天查问题的时候发现 在对时间 格式化为 时间戳的时候,time.mktime(time.strptime('20170609-15:00:00','%Y%m%d-%H:%M:%S')) 发现测试环境 ...

  4. 转:IOS 基于APNS消息推送原理与实现(JAVA后台)

    Push的原理: Push 的工作机制可以简单的概括为下图   图中,Provider是指某个iPhone软件的Push服务器,这篇文章我将使用.net作为Provider. APNS 是Apple ...

  5. bzoj千题计划181:bzoj1878: [SDOI2009]HH的项链

    http://www.lydsy.com/JudgeOnline/problem.php?id=1878 之前用莫队做的,现在用树状数组 把每种数的第一个出现位置在树状数组中+1 nxt[i] 记录i ...

  6. HDU 4315 阶梯博弈变形

    n个棋子,其中第k个是红色的,每个棋子只能往上爬,而且不能越过.重叠其他棋子,谁将红色棋子移到顶部谁赢. 由于只能往上爬,所以很像阶梯博弈.这题有2个限制,棋子不能重叠,有红棋存在 首先不考虑红色棋, ...

  7. element-UI 下拉条数多渲染慢

    本文地址:https://www.cnblogs.com/veinyin/p/10120398.html 如果渲染为普通下拉框,用户难以找到要选择的那一项,增加模糊搜索功能,可解决渲染缓慢问题,但用户 ...

  8. Python内置模块与标准库

    Python内置模块就是标准库(模块)吗?或者说Python的自带string模块是内置模块吗? 答案是:string不是内置模块,它是标准库.也就是说Python内置模块和标准库并不是同一种东西. ...

  9. C++(vs)多线程调试 (转)

      在一个程序中,这些独立运行的程序片断叫作“线程”(Thread),利用它编程的概念就叫作“多线程处理”.利用线程,用户可按下一个按钮,然后程序会立即作出响应,而不是让用户等待程序完成了当前任务以后 ...

  10. deeplearning.ai学习seq2seq模型

    一.seq2seq架构图 seq2seq模型左边绿色的部分我们称之为encoder,左边的循环输入最终生成一个固定向量作为右侧的输入,右边紫色的部分我们称之为decoder.单看右侧这个结构跟我们之前 ...