Django模版语言inclusion_tag的用法

2024-06-19 04:18

本文主要是介绍Django模版语言inclusion_tag的用法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Django模版语言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. register=template.Library()
  5. @register.inclusion_tag('left_tag.html')
  6. def left_panel(username):
  7. user_obj = models.UserInfo.objects.filter(username=username).first()
  8. blog = user_obj.blog
  9. # 文章分类
  10. category_article_list = models.Category.objects.filter(blog=blog).annotate(num=Count('article')).values('title', 'num')
  11. # 标签分类
  12. tag_article_list = models.Tag.objects.filter(blog=blog).annotate(num=Count('article')).values('title', 'num')
  13. # 时间分类auth_group
  14. time_archive_list = models.Article.objects.filter(user__username=username).extra(
  15. select={'ym': 'DATE_FORMAT(create_time,"%%Y-%%m")'}
  16. ).values('ym').annotate(num=Count('nid')).values('ym', 'num')
  17. return {
  18. 'username': username,
  19. 'category_article_list': category_article_list,
  20. 'tag_article_list': tag_article_list,
  21. 'time_archive_list': time_archive_list,
  22. }

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

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

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

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

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

 

 

				<script>(function(){function setArticleH(btnReadmore,posi){var winH = $(window).height();var articleBox = $("div.article_content");var artH = articleBox.height();if(artH > winH*posi){articleBox.css({'height':winH*posi+'px','overflow':'hidden'})btnReadmore.click(function(){if(typeof window.localStorage === "object" && typeof window.csdn.anonymousUserLimit === "object"){if(!window.csdn.anonymousUserLimit.judgment()){window.csdn.anonymousUserLimit.Jumplogin();return false;}else if(!currentUserName){window.csdn.anonymousUserLimit.updata();}}articleBox.removeAttr("style");$(this).parent().remove();})}else{btnReadmore.parent().remove();}}var btnReadmore = $("#btn-readmore");if(btnReadmore.length>0){if(currentUserName){setArticleH(btnReadmore,3);}else{setArticleH(btnReadmore,1.2);}}})()</script></article>

这篇关于Django模版语言inclusion_tag的用法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/1073985

相关文章

揭秘Python Socket网络编程的7种硬核用法

《揭秘PythonSocket网络编程的7种硬核用法》Socket不仅能做聊天室,还能干一大堆硬核操作,这篇文章就带大家看看Python网络编程的7种超实用玩法,感兴趣的小伙伴可以跟随小编一起... 目录1.端口扫描器:探测开放端口2.简易 HTTP 服务器:10 秒搭个网页3.局域网游戏:多人联机对战4.

MyBatis 动态 SQL 优化之标签的实战与技巧(常见用法)

《MyBatis动态SQL优化之标签的实战与技巧(常见用法)》本文通过详细的示例和实际应用场景,介绍了如何有效利用这些标签来优化MyBatis配置,提升开发效率,确保SQL的高效执行和安全性,感... 目录动态SQL详解一、动态SQL的核心概念1.1 什么是动态SQL?1.2 动态SQL的优点1.3 动态S

java之Objects.nonNull用法代码解读

《java之Objects.nonNull用法代码解读》:本文主要介绍java之Objects.nonNull用法代码,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录Java之Objects.nonwww.chinasem.cnNull用法代码Objects.nonN

JavaScript Array.from及其相关用法详解(示例演示)

《JavaScriptArray.from及其相关用法详解(示例演示)》Array.from方法是ES6引入的一个静态方法,用于从类数组对象或可迭代对象创建一个新的数组实例,本文将详细介绍Array... 目录一、Array.from 方法概述1. 方法介绍2. 示例演示二、结合实际场景的使用1. 初始化二

Django序列化中SerializerMethodField的使用详解

《Django序列化中SerializerMethodField的使用详解》:本文主要介绍Django序列化中SerializerMethodField的使用,具有很好的参考价值,希望对大家有所帮... 目录SerializerMethodField的基本概念使用SerializerMethodField的

C语言中的数据类型强制转换

《C语言中的数据类型强制转换》:本文主要介绍C语言中的数据类型强制转换方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录C语言数据类型强制转换自动转换强制转换类型总结C语言数据类型强制转换强制类型转换:是通过类型转换运算来实现的,主要的数据类型转换分为自动转换

利用Go语言开发文件操作工具轻松处理所有文件

《利用Go语言开发文件操作工具轻松处理所有文件》在后端开发中,文件操作是一个非常常见但又容易出错的场景,本文小编要向大家介绍一个强大的Go语言文件操作工具库,它能帮你轻松处理各种文件操作场景... 目录为什么需要这个工具?核心功能详解1. 文件/目录存javascript在性检查2. 批量创建目录3. 文件

C语言实现两个变量值交换的三种方式

《C语言实现两个变量值交换的三种方式》两个变量值的交换是编程中最常见的问题之一,以下将介绍三种变量的交换方式,其中第一种方式是最常用也是最实用的,后两种方式一般只在特殊限制下使用,需要的朋友可以参考下... 目录1.使用临时变量(推荐)2.相加和相减的方式(值较大时可能丢失数据)3.按位异或运算1.使用临时

使用C语言实现交换整数的奇数位和偶数位

《使用C语言实现交换整数的奇数位和偶数位》在C语言中,要交换一个整数的二进制位中的奇数位和偶数位,重点需要理解位操作,当我们谈论二进制位的奇数位和偶数位时,我们是指从右到左数的位置,本文给大家介绍了使... 目录一、问题描述二、解决思路三、函数实现四、宏实现五、总结一、问题描述使用C语言代码实现:将一个整

一文带你了解SpringBoot中启动参数的各种用法

《一文带你了解SpringBoot中启动参数的各种用法》在使用SpringBoot开发应用时,我们通常需要根据不同的环境或特定需求调整启动参数,那么,SpringBoot提供了哪些方式来配置这些启动参... 目录一、启动参数的常见传递方式二、通过命令行参数传递启动参数三、使用 application.pro