django自定义标签学习
前言介绍
Django 默认提供了很多有用的 内置标签和过滤器 ,标签或者过滤器的作用是随处可用
,它就好像是一个Django 内部命令可以在页面的不同位置使用
对于博客系统来说,最常见的 "最近发布的N条记录"
、"访问量最多的TopN文章"
等都可以使用标签功能是实现。
Django的标签是分类三类
- 简单标签 simple_tag
- 应用标签 inclusion_tag
- 赋值标签 assignment_tag
Django的标签在自定义的时候需要遵循一定的规范
1、标签一定在装载在某个APP下的
2、需要在该APP下创建名字为templatetags
的Python包
,且名字必须叫这个。既然是包,别忘记了__init__.py
文件
3、在templatetags
包下创建文件名(比如在demo_tags
),该文件名不能和Django内置标签名冲突
4、需要在 工程的INSTALLED_APPS
中进行注册
5、最终在template模板中加载 {% load demo_tags%}
自定义简单标签
简单标签通过接受参数,对输入的参数做一些处理,然后返回结果
1 | # blog/templatetags/blog_tags.py |
使用装饰器,把 say_hello装饰之后注册到template模板中去,这样就可以在template中通过{% load xxx %}
来导入加载
这里作为演示说明,不定义具体的模板HTML页面,我们使用Django内置的Template
函数进行模拟就行
1 | (django_blog) [ 22-10-24 18:45 ] [ colinspace ] [~/Documents/python_projects/django_blog] python3 manage.py shell |
另外可以通过@register.simple_tag(name='aliasname')
给简单标签设置别名
自定义引用标签
自定义引用标签可以对其他模板进行渲染,然后将渲染结果输出
这里具体的里面是后面要实现的评论功能,在详情页加载评论框,把 评论框作为一个独立的template定义成一个标签
1 |
|
comments/comment_form.html
是一个独立的template html 文件,这个而文件中定义了一个 form表单
1 | <!-- comments/templates/comments/comment_form.html --> |
然后在详情页中使用的时候就很方便
1 | <!-- 加载标签 --> |
是不是很简单,这样我们就可以累积成自己的标签库,复用到别的项目中去
自定义赋值标签
赋值标签其实就是
简单标签
,只不过在使用的时候,不直接输出结果,而是使用 as 关键字将结果储存在指定的上下文变量中,从而降低了传输上下文的成本
标签还是使用上面的 say_hello
,继续使用 Template
进行演示
1 | """ t = Template( |
可以看到使用过程中把 结果值赋值给了 s1
然后再其他的位置直接使用 s1
就行。而且可以多次使用
1 | """ {% load blog_tags %} t3 = Template( |
如果觉得文章对你有用,请不吝点赞和关注公众号搜索 全栈运维
或者 DailyJobOps
个人博客 http://blog.colinspace.com/
知乎平台 https://www.zhihu.com/people/colin-31-49
django自定义标签学习