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中logging模块用法示例总结

《Python中logging模块用法示例总结》在Python中logging模块是一个强大的日志记录工具,它允许用户将程序运行期间产生的日志信息输出到控制台或者写入到文件中,:本文主要介绍Pyt... 目录前言一. 基本使用1. 五种日志等级2.  设置报告等级3. 自定义格式4. C语言风格的格式化方法

SpringBoot 获取请求参数的常用注解及用法

《SpringBoot获取请求参数的常用注解及用法》SpringBoot通过@RequestParam、@PathVariable等注解支持从HTTP请求中获取参数,涵盖查询、路径、请求体、头、C... 目录SpringBoot 提供了多种注解来方便地从 HTTP 请求中获取参数以下是主要的注解及其用法:1

GO语言短变量声明的实现示例

《GO语言短变量声明的实现示例》在Go语言中,短变量声明是一种简洁的变量声明方式,使用:=运算符,可以自动推断变量类型,下面就来具体介绍一下如何使用,感兴趣的可以了解一下... 目录基本语法功能特点与var的区别适用场景注意事项基本语法variableName := value功能特点1、自动类型推

Java中HashMap的用法详细介绍

《Java中HashMap的用法详细介绍》JavaHashMap是一种高效的数据结构,用于存储键值对,它是基于哈希表实现的,提供快速的插入、删除和查找操作,:本文主要介绍Java中HashMap... 目录一.HashMap1.基本概念2.底层数据结构:3.HashCode和equals方法为什么重写Has

GO语言中函数命名返回值的使用

《GO语言中函数命名返回值的使用》在Go语言中,函数可以为其返回值指定名称,这被称为命名返回值或命名返回参数,这种特性可以使代码更清晰,特别是在返回多个值时,感兴趣的可以了解一下... 目录基本语法函数命名返回特点代码示例命名特点基本语法func functionName(parameters) (nam

Android协程高级用法大全

《Android协程高级用法大全》这篇文章给大家介绍Android协程高级用法大全,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友跟随小编一起学习吧... 目录1️⃣ 协程作用域(CoroutineScope)与生命周期绑定Activity/Fragment 中手

Python异步编程之await与asyncio基本用法详解

《Python异步编程之await与asyncio基本用法详解》在Python中,await和asyncio是异步编程的核心工具,用于高效处理I/O密集型任务(如网络请求、文件读写、数据库操作等),接... 目录一、核心概念二、使用场景三、基本用法1. 定义协程2. 运行协程3. 并发执行多个任务四、关键

Go语言连接MySQL数据库执行基本的增删改查

《Go语言连接MySQL数据库执行基本的增删改查》在后端开发中,MySQL是最常用的关系型数据库之一,本文主要为大家详细介绍了如何使用Go连接MySQL数据库并执行基本的增删改查吧... 目录Go语言连接mysql数据库准备工作安装 MySQL 驱动代码实现运行结果注意事项Go语言执行基本的增删改查准备工作

Python中yield的用法和实际应用示例

《Python中yield的用法和实际应用示例》在Python中,yield关键字主要用于生成器函数(generatorfunctions)中,其目的是使函数能够像迭代器一样工作,即可以被遍历,但不会... 目录python中yield的用法详解一、引言二、yield的基本用法1、yield与生成器2、yi

深度解析Python yfinance的核心功能和高级用法

《深度解析Pythonyfinance的核心功能和高级用法》yfinance是一个功能强大且易于使用的Python库,用于从YahooFinance获取金融数据,本教程将深入探讨yfinance的核... 目录yfinance 深度解析教程 (python)1. 简介与安装1.1 什么是 yfinance?