学习日记之《Django3 Web应用开发实战》——第六章——深入模板
第六章——深入模板
自定义模板标签和自定义过滤器
# 项目目录下自定义文件夹如mytags,在mytags下创建templatestags(固定)文件夹,创建自定义标签功能 from django import template # 创建模板对象 register = template.Library() # 定义模板节点类 class ReversalNode(template.Node): def __init__(self, value): self.value = str(value) def render(self, context): return self.value[::-1] # 声明并定义标签 # parse:解析器对象, token:被解析的对象 @register.tag(name='reversal') def do_reversal(parse, token): try: tag_name, value = token.split_contents() # tag_name: 标签名 value: 标签传递的数据 except: raise template.TemplateSyntaxError('syntax') # 调用自定义的模板节点类 return ReversalNode(value) @register.filter(name='replace') def do_replace(value, args): oldvalue = args.split(':')[0] newvalue = args.split(':')[1] return value.replace(oldvalue, newvalue)
# 模板文件前load 自定义标签 {% load custom_tags %} Title {% reversal 'Django' %} # 自定义标签 {{ value | replace:'Python:Django' }} # 自定义过滤器
Jinja2模板引擎
pip3 install Jinja2
# 和settings.py 同目录创建jinja2_cus.py, 作用:将jinja2模板加载到django 项目中 from django.contrib.staticfiles.storage import staticfiles_storage from django.urls import reverse from jinja2 import Environment # 将jinja2 模板设置到项目环境 def environment(**option): env = Environment(**option) env.globals.update({ 'static': staticfiles_storage.url, 'url': reverse, }) return env
settings.py TEMPLATES = [ # 使用jinja2 模板引擎 { 'BACKEND': 'django.template.backends.jinja2.Jinja2', 'DIRS': [BASE_DIR, 'templates'], 'APP_DIRS': True, 'OPTIONS': { 'environment': 'web_test.jinja2_tem.environment', }, }, # 使用Django模板引擎 { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [], 'APP_DIRS': True, 'OPTIONS': { 'context_processors': [ 'django.template.context_processors.debug', 'django.template.context_processors.request', 'django.contrib.auth.context_processors.auth', 'django.contrib.messages.context_processors.messages', ], }, }, ]
jinja 自定义过滤器
# 和settings.py 同目录创建jinja2_cus.py, from django.contrib.staticfiles.storage import staticfiles_storage from django.urls import reverse from jinja2 import Environment def myreplace(value, old='jinja2', new='django'): return str(value).replace(old, new) # 将jinja2 模板设置到项目环境 def environment(**option): env = Environment(**option) env.globals.update({ 'static': staticfiles_storage.url, 'url': reverse, }) # 注册自定义过滤器 env.filters['myreplace'] = myreplace return env
(图片来源网络,侵删)
文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。