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

相关文章

Go语言开发实现查询IP信息的MCP服务器

《Go语言开发实现查询IP信息的MCP服务器》随着MCP的快速普及和广泛应用,MCP服务器也层出不穷,本文将详细介绍如何在Go语言中使用go-mcp库来开发一个查询IP信息的MCP... 目录前言mcp-ip-geo 服务器目录结构说明查询 IP 信息功能实现工具实现工具管理查询单个 IP 信息工具的实现服

Java中的@SneakyThrows注解用法详解

《Java中的@SneakyThrows注解用法详解》:本文主要介绍Java中的@SneakyThrows注解用法的相关资料,Lombok的@SneakyThrows注解简化了Java方法中的异常... 目录前言一、@SneakyThrows 简介1.1 什么是 Lombok?二、@SneakyThrows

Python中的getopt模块用法小结

《Python中的getopt模块用法小结》getopt.getopt()函数是Python中用于解析命令行参数的标准库函数,该函数可以从命令行中提取选项和参数,并对它们进行处理,本文详细介绍了Pyt... 目录getopt模块介绍getopt.getopt函数的介绍getopt模块的常用用法getopt模

C 语言中enum枚举的定义和使用小结

《C语言中enum枚举的定义和使用小结》在C语言里,enum(枚举)是一种用户自定义的数据类型,它能够让你创建一组具名的整数常量,下面我会从定义、使用、特性等方面详细介绍enum,感兴趣的朋友一起看... 目录1、引言2、基本定义3、定义枚举变量4、自定义枚举常量的值5、枚举与switch语句结合使用6、枚

mysql中的group by高级用法

《mysql中的groupby高级用法》MySQL中的GROUPBY是数据聚合分析的核心功能,主要用于将结果集按指定列分组,并结合聚合函数进行统计计算,下面给大家介绍mysql中的groupby用法... 目录一、基本语法与核心功能二、基础用法示例1. 单列分组统计2. 多列组合分组3. 与WHERE结合使

Java中Scanner的用法示例小结

《Java中Scanner的用法示例小结》有时候我们在编写代码的时候可能会使用输入和输出,那Java也有自己的输入和输出,今天我们来探究一下,对JavaScanner用法相关知识感兴趣的朋友一起看看吧... 目录前言一 输出二 输入Scanner的使用多组输入三 综合练习:猜数字游戏猜数字前言有时候我们在

java解析jwt中的payload的用法

《java解析jwt中的payload的用法》:本文主要介绍java解析jwt中的payload的用法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Java解析jwt中的payload1. 使用 jjwt 库步骤 1:添加依赖步骤 2:解析 JWT2. 使用 N

Linux命令之firewalld的用法

《Linux命令之firewalld的用法》:本文主要介绍Linux命令之firewalld的用法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录linux命令之firewalld1、程序包2、启动firewalld3、配置文件4、firewalld规则定义的九大

SQL BETWEEN 的常见用法小结

《SQLBETWEEN的常见用法小结》BETWEEN操作符是SQL中非常有用的工具,它允许你快速选取某个范围内的值,本文给大家介绍SQLBETWEEN的常见用法,感兴趣的朋友一起看看吧... 在SQL中,BETWEEN是一个操作符,用于选取介于两个值之间的数据。它包含这两个边界值。BETWEEN操作符常用

MySql match against工具详细用法

《MySqlmatchagainst工具详细用法》在MySQL中,MATCH……AGAINST是全文索引(Full-Textindex)的查询语法,它允许你对文本进行高效的全文搜素,支持自然语言搜... 目录一、全文索引的基本概念二、创建全文索引三、自然语言搜索四、布尔搜索五、相关性排序六、全文索引的限制七