自定义模板标签,过滤器。英文翻译是Custom template tags and filterscustom filter自定义过滤器今天不在我的记录范围之内,以后用到再看官方文档也不迟。

**问题1:**custom template tags 到底长啥样?
custom template tags—github
Many template tags take a number of arguments – strings or template variables – and return a result after doing some processing based solely on the input arguments and some external information. For example, a current_time tag might accept a format string and return the time as a string formatted accordingly.

To ease the creation of these types of tags, Django provides a helper function, simple_tag. This function, which is a method ofdjango.template.Library, takes a function that accepts any number of arguments, wraps it in a render function and the other necessary bits mentioned above and registers it with the template system.

(为了降低custom tags的难度,你可以使用Django提供的快捷函数simple_tag)

Our current_time function could thus be written like this:

import datetime
from django import templateregister = template.Library()# 只有向系统注册过的tags,系统才认得你。@register.simple_tag(takes_context=True)#加上这句后我就是一名合格的template tags
def current_time(context, format_string):timezone = context['timezone']return your_get_current_time_method(timezone, format_string)

Note that the first argument must be called context.
Note that the first argument must be called context.
Note that the first argument must be called context.

@register.simple_tag(takes_context=True)
# 这个装饰器表明这个函数是一个模板标签,takes_context = True 表示接收上下文对象,就是前面所说的封装了各种变量的 Context 对象。
def paginate(context, object_list ,page_count):# context是Context 对象,object_list是你要分页的对象,page_count表示每页的数量 , page_countleft = 3  # 当前页码左边显示几个页码号 -1,比如3就显示2个right = 3  # 当前页码右边显示几个页码号 -1paginator = Paginator(object_list, page_count)  # 通过object_list分页对象page = context['request'].GET.get('page')  # 从 Http 请求中获取用户请求的页码号try:object_list = paginator.page(page)  # 根据页码号获取第几页的数据context['current_page'] = int(page)  # 把当前页封装进context(上下文)中pages = get_left(context['current_page'], left, paginator.num_pages) + get_right(context['current_page'], right,paginator.num_pages)# 调用了两个辅助函数,根据当前页得到了左右的页码号,比如设置成获取左右两边2个页码号,那么假如当前页是5,则 pages = [3,4,5,6,7],当然一些细节需要处理,比如如果当前页是2,那么获取的是pages = [1,2,3,4]except PageNotAnInteger:# 异常处理,如果用户传递的page值不是整数,则把第一页的值返回给他object_list = paginator.page(1)context['current_page'] = 1  # 当前页是1pages = get_right(context['current_page'], right, paginator.num_pages)except EmptyPage:# 如果用户传递的 page 值是一个空值,那么把最后一页的值返回给他object_list = paginator.page(paginator.num_pages)context['current_page'] = paginator.num_pages  # 当前页是最后一页,num_pages的值是总分页数pages = get_left(context['current_page'], left, paginator.num_pages)context['article_list'] = object_list  # 把获取到的分页的数据封装到上下文中context['pages'] = pages  # 把页码号列表封装进去context['last_page'] = paginator.num_pages  # 最后一页的页码号context['first_page'] = 1  # 第一页的页码号为1try:# 获取 pages 列表第一个值和最后一个值,主要用于在是否该插入省略号的判断,在模板文件中将会体会到它的用处。注意这里可能产生异常,因为pages可能是一个空列表,比如本身只有一个分页,那么pages就为空,因为我们永远不会获取页码为1的页码号(至少有1页,1的页码号已经固定写在模板文件中)context['pages_first'] = pages[0]context['pages_last'] = pages[-1] + 1# +1的原因是为了方便判断,在模板文件中将会体会到其作用。except IndexError:context['pages_first'] = 1  # 发生异常说明只有1页context['pages_last'] = 2  # 1 + 1 后的值return ''  # 必须加这个,否则首页会显示个None

问题2:自定义完标签后,在模板中怎么使用呢?

我的自定义过的标签放在templatetags/paginate_tags.py中

处理函数

{% load paginate_tags %}#第一步:把文件名包含进来
{% paginate blogposts 2 %} #第二步:调用函数 添加参数。注意context参数不用你传。

注意:
经由def paginate(context, object_list ,page_count):函数处理过的数据,在模板中如何使用???

    context['article_list'] = object_list  # 把获取到的分页的数据封装到上下文中context['pages'] = pages  # 把页码号列表封装进去context['last_page'] = paginator.num_pages  # 最后一页的页码号context['first_page'] = 1  # 第一页的页码号为1

数据输送到函数中,进行处理,然后将数据封装到之前的context上下文变量中,供template使用,使用方式和使用字典一样。

Django 自定义模板标签(template_tags)究竟有什么用?相关推荐

  1. django自定义模板标签,通过键获取字典的值,屏蔽姓名等隐蔽信息并调用展示到页面上

    1.在web开发中,经常会说要屏蔽某些字眼,用*来屏蔽客户比较隐蔽的信息,如身份证,姓名,手机号等等,当然,如果安全性做得好一点的会加密身份证后存入数据库,如果没有的话,直接取出来,页面要展示的时候, ...

  2. Django 自定义模板标签TemplateTags

    创建自定义的模板标签(template tags) Django提供了以下帮助函数(functions)来允许你以一种简单的方式创建自己的模板标签(template tags): simple_tag ...

  3. Django自定义模板标签的使用详解

    目录 1.创建子应用:python manage.py startapp test01 2.进行相关的配置 3.在新建的test01文件下创建urls.py(此处名称可变但注意上图) 4.在test0 ...

  4. django “如何”系列4:如何编写自定义模板标签和过滤器

    django的模板系统自带了一系列的内建标签和过滤器,一般情况下可以满足你的要求,如果觉得需更精准的模板标签或者过滤器,你可以自己编写模板标签和过滤器,然后使用{% load %}标签使用他们. 代码 ...

  5. 20190325 Django自定义过滤器和自定义模板标签

    代码布局(死去活来) 自定义要先解决几个问题: 1). 在哪里定义,要将代码写在哪里? app目录下的名为templatetags的文件夹,必须叫这个名字.这个文件夹必须是一个python的包(pyt ...

  6. Django框架学习20--模板变量,模板标签,模板过滤器及自定义模板过滤器,自定义模板标签

    1.模板变量 string 字符串和 int 类型,通过key名称直接取值,如:{{ n_name }} list类型的取值,通过点下班取值,如:{{ fancy.0 }}.{{ fancy.1 }} ...

  7. template标签_Django实战: 利用自定义模板标签实现仿CSDN博客月度归档

    应网友慕之岩的请求,现提供下Django项目中如何使用自定义标签实现仿CSDN博客的月度归档(如下图所示).要求按月统计每个月发表的博文篇数, 跳过空白月份,最后结果按发布时间逆序排列.点击每个月份可 ...

  8. 模板标签(tags)的介绍及如何自定义模板标签

    什么是模板标签(tags) 模板标签都是放在{%  %}括号里的,常见的模板标签有{% load xxxx %}, {% block xxxx %}, {% if xxx %}, {% url 'xx ...

  9. php嵌套模板,thinkphp3.1自定义模板标签嵌套实现

    thinkphp3.1自定义模板标签嵌套实现 之前做的自定义标签,属性里面读取不到上层标签的值,然后找了很多文档发现没有能解决的,然后就自己研究了一下,搞出来了,下面是方法,绝对能用,不能用我吃了它. ...

最新文章

  1. python常见错误-新手常见Python错误及异常解决处理方案
  2. mvp的全称_是让人提神醒脑的 MVP、MVVM 关系精讲!
  3. Set、Map集合、栈、队列
  4. TopFreeTheme精选免费模板【20130703】
  5. 用php写弧度转角度,Python中转换角度为弧度的radians()方法
  6. Redis读写分离技术解析
  7. Ehcache小结(二)
  8. 光斑质心检测之曲线拟合求亚像素位置的三种方式
  9. 2022爱分析· 汽车行业数字化厂商全景报告
  10. 【外文文献检索与下载方法】
  11. Win10如何为命令提示符增加输入命令获取管理员权限功能?
  12. 交警对开车人的“真言”
  13. MODULE_AUTHOR 功能
  14. python和mysql匹配吗_python使用mysql
  15. 【Java】各种日期转换
  16. Js基础引导(二)——语法
  17. 前端CSS核心内容浮动
  18. 阿里研究院花几年心得终成趣谈网络协议,附技术官讲解
  19. SSH概述与配置文件说明
  20. C++解决猴子吃桃问题(详细)

热门文章

  1. MySQL字符串处理函数
  2. java日语_java中常用日语词汇整理
  3. 安卓镜像刻录软件_安卓8.0开发者预览版镜像系统下载-Android O开发者预览版镜像官方正式版-东坡下载...
  4. iOS基础UI瀑布流界面简单搭建
  5. Jsoncpp与中文出现的问题
  6. 统计字符串中字符出现次数以及排序
  7. 网络图片转换为文件类型(File)
  8. Book Collector for Mac(图书信息管理软件)
  9. ubuntu Basler相机怎么设置静态IP
  10. 21天读书打卡!快上车!