浅谈Django自定义模板标签template_tags的用处

浅谈Django自定义模板标签template_tags的用处,第1张

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

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

**问题1:**customtemplateTags到底长啥样?

customtemplatetags―github

ManytemplateTagstakeanumberofargumentsCstringsortemplatevariablesCandreturnaresultafterdoingsomeprocessingbasedsolelyontheinputargumentsandsomeexternalinformation.Forexample,acurrent_tiMetagmightacceptaformatstringandreturnthetimeasastringformattedaccordingly.

ToeasethecreationofthesetypesofTags,DjangoprovIDesahelperfunction,simple_tag.Thisfunction,whichisamethodofdjango.template.library,takesafunctionthatacceptsanynumberofarguments,wrapsitinarenderfunctionandtheothernecessarybitsmentionedaboveandregistersitwiththetemplatesystem.

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

Ourcurrent_timefunctionCouldthusbewrittenlikethis:

import datetimefrom django import templateregister = template.library()# 只有向系统注册过的Tags,系统才认得你。@register.simple_tag(takes_context=True)#加上这句后我就是一名合格的template Tagsdef 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_count  left = 3 # 当前页码左边显示几个页码号 -1,比如3就显示2个  right = 3 # 当前页码右边显示几个页码号 -1  paginator = 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 # 当前页是1    pages = get_right(context['current_page'],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'],paginator.num_pages)  context['article_List'] = object_List # 把获取到的分页的数据封装到上下文中  context['pages'] = pages # 把页码号列表封装进去  context['last_page'] = paginator.num_pages # 最后一页的页码号  context['first_page'] = 1 # 第一页的页码号为1  try:    # 获取 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参数不用你传。

注意:

经由defpaginate(context,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的用处的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站:

简单了解Django模板的使用

获取Django项目的全部url方法详解

django实现用户登陆功能详解

如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!

总结

以上是内存溢出为你收集整理的浅谈Django自定义模板标签template_tags的用处全部内容,希望文章能够帮你解决浅谈Django自定义模板标签template_tags的用处所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1200963.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-04
下一篇 2022-06-04

发表评论

登录后才能评论

评论列表(0条)

保存