自定义模板标签,过滤器。英文翻译是Customtemplatetagsandfilters。customfilter自定义过滤器今天不在我的记录范围之内,以后用到再看官方文档也不迟。
**问题1:**customtemplatetags到底长啥样?
customtemplatetags—github
Manytemplatetagstakeanumberofarguments–stringsortemplatevariables–andreturnaresultafterdoingsomeprocessingbasedsolelyontheinputargumentsandsomeexternalinformation.Forexample,acurrent_timetagmightacceptaformatstringandreturnthetimeasastringformattedaccordingly.
Toeasethecreationofthesetypesoftags,Djangoprovidesahelperfunction,simple_tag.Thisfunction,whichisamethodofdjango.template.Library,takesafunctionthatacceptsanynumberofarguments,wrapsitinarenderfunctionandtheothernecessarybitsmentionedaboveandregistersitwiththetemplatesystem.
(为了降低customtags的难度,你可以使用Django提供的快捷函数simple_tag)
Ourcurrent_timefunctioncouldthusbewrittenlikethis:
import datetime from django import template register = 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_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'], 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 # 第一页的页码号为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,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的用处的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站:
简单了解Django模板的使用
获取Django项目的全部url方法详解
django实现用户登陆功能详解
如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
P70系列延期,华为新旗舰将在下月发布
3月20日消息,近期博主@数码闲聊站 透露,原定三月份发布的华为新旗舰P70系列延期发布,预计4月份上市。
而博主@定焦数码 爆料,华为的P70系列在定位上已经超过了Mate60,成为了重要的旗舰系列之一。它肩负着重返影像领域顶尖的使命。那么这次P70会带来哪些令人惊艳的创新呢?
根据目前爆料的消息来看,华为P70系列将推出三个版本,其中P70和P70 Pro采用了三角形的摄像头模组设计,而P70 Art则采用了与上一代P60 Art相似的不规则形状设计。这样的外观是否好看见仁见智,但辨识度绝对拉满。
更新日志
- 雨林唱片《赏》新曲+精选集SACD版[ISO][2.3G]
- 罗大佑与OK男女合唱团.1995-再会吧!素兰【音乐工厂】【WAV+CUE】
- 草蜢.1993-宝贝对不起(国)【宝丽金】【WAV+CUE】
- 杨培安.2009-抒·情(EP)【擎天娱乐】【WAV+CUE】
- 周慧敏《EndlessDream》[WAV+CUE]
- 彭芳《纯色角3》2007[WAV+CUE]
- 江志丰2008-今生为你[豪记][WAV+CUE]
- 罗大佑1994《恋曲2000》音乐工厂[WAV+CUE][1G]
- 群星《一首歌一个故事》赵英俊某些作品重唱企划[FLAC分轨][1G]
- 群星《网易云英文歌曲播放量TOP100》[MP3][1G]
- 方大同.2024-梦想家TheDreamer【赋音乐】【FLAC分轨】
- 李慧珍.2007-爱死了【华谊兄弟】【WAV+CUE】
- 王大文.2019-国际太空站【环球】【FLAC分轨】
- 群星《2022超好听的十倍音质网络歌曲(163)》U盘音乐[WAV分轨][1.1G]
- 童丽《啼笑姻缘》头版限量编号24K金碟[低速原抓WAV+CUE][1.1G]