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

相关文章

C语言中联合体union的使用

本文编辑整理自: http://bbs.chinaunix.net/forum.php?mod=viewthread&tid=179471 一、前言 “联合体”(union)与“结构体”(struct)有一些相似之处。但两者有本质上的不同。在结构体中,各成员有各自的内存空间, 一个结构变量的总长度是各成员长度之和。而在“联合”中,各成员共享一段内存空间, 一个联合变量

#error用法

/* *检查编译此源文件的编译器是不是C++编译器 *如果使用的是C语言编译器则执行#error命令 *如果使用的是 C++ 编译器则跳过#error命令 */ #ifndef __cplusplus #error 亲,您当前使用的不是C++编译器噢! #endif #include <stdio.h> int main() {

C++必修:模版的入门到实践

✨✨ 欢迎大家来到贝蒂大讲堂✨✨ 🎈🎈养成好习惯,先赞后看哦~🎈🎈 所属专栏:C++学习 贝蒂的主页:Betty’s blog 1. 泛型编程 首先让我们来思考一个问题,如何实现一个交换函数? void swap(int& x, int& y){int tmp = x;x = y;y = tmp;} 相信大家很快就能写出上面这段代码,但是如果要求这个交换函数支持字符型

大语言模型(LLMs)能够进行推理和规划吗?

大语言模型(LLMs),基本上是经过强化训练的 n-gram 模型,它们在网络规模的语言语料库(实际上,可以说是我们文明的知识库)上进行了训练,展现出了一种超乎预期的语言行为,引发了我们的广泛关注。从训练和操作的角度来看,LLMs 可以被认为是一种巨大的、非真实的记忆库,相当于为我们所有人提供了一个外部的系统 1(见图 1)。然而,它们表面上的多功能性让许多研究者好奇,这些模型是否也能在通常需要系

人工和AI大语言模型成本对比 ai语音模型

这里既有AI,又有生活大道理,无数渺小的思考填满了一生。 上一专题搭建了一套GMM-HMM系统,来识别连续0123456789的英文语音。 但若不是仅针对数字,而是所有普通词汇,可能达到十几万个词,解码过程将非常复杂,识别结果组合太多,识别结果不会理想。因此只有声学模型是完全不够的,需要引入语言模型来约束识别结果。让“今天天气很好”的概率高于“今天天汽很好”的概率,得到声学模型概率高,又符合表达

SQL Server中,isnull()函数以及null的用法

SQL Serve中的isnull()函数:          isnull(value1,value2)         1、value1与value2的数据类型必须一致。         2、如果value1的值不为null,结果返回value1。         3、如果value1为null,结果返回vaule2的值。vaule2是你设定的值。        如

C语言 将“China”译成密码

将“China”译成密码,密码规律是:用原来的字母后面的第4个字母代替原来的字母。例如,字母“A”后面的第4个字母是“E”,用“E”代替“A”。因此,“China”应译为“Glmre”。编译程序用付赋初值的方法使c1,c2,c3,c4,c5这五个变量的值分别为“C”,“h”,“i”,“n”,“a”,经过运算,使c1,c2,c3,c4,c5分别变成“G”,“l”,“m”,“r”,“e”。分别用put

tensorboard-----summary用法总结

Tensorflow学习笔记——Summary用法         最近在研究tensorflow自带的例程speech_command,顺便学习tensorflow的一些基本用法。 其中tensorboard 作为一款可视化神器,可以说是学习tensorflow时模型训练以及参数可视化的法宝。 而在训练过程中,主要用到了tf.summary()的各类方法,能够保存训练过程以及参数分布图并在

C语言入门系列:探秘二级指针与多级指针的奇妙世界

文章目录 一,指针的回忆杀1,指针的概念2,指针的声明和赋值3,指针的使用3.1 直接给指针变量赋值3.2 通过*运算符读写指针指向的内存3.2.1 读3.2.2 写 二,二级指针详解1,定义2,示例说明3,二级指针与一级指针、普通变量的关系3.1,与一级指针的关系3.2,与普通变量的关系,示例说明 4,二级指针的常见用途5,二级指针扩展到多级指针 小结 C语言的学习之旅中,二级

vscode-创建vue3项目-修改暗黑主题-常见错误-element插件标签-用法涉及问题

文章目录 1.vscode创建运行编译vue3项目2.添加项目资源3.添加element-plus元素4.修改为暗黑主题4.1.在main.js主文件中引入暗黑样式4.2.添加自定义样式文件4.3.html页面html标签添加样式 5.常见错误5.1.未使用变量5.2.关闭typescript检查5.3.调试器支持5.4.允许未到达代码和未定义代码 6.element常用标签6.1.下拉列表