jinja2具有强大的自动HTML转义系统,可以有效地阻止跨站脚本攻击。 模板继承机制,此机制可以使得所有的模板都具有相似一致的布局,也方便了开发人员对模板的修改和管理。 高效的执行效率,Jinja2引擎在模板第一次加载时就把源码转换成Python字节码,加快模板执行时间。
1.安装Jinja2扩展包
pip install Jinja2
2.创建Jinja2模板引擎环境
--在项目包目录-->utils目录中创建jinja2_env.py文件
# newsdemo/utils/jinja2_env.py
from jinja2 import Environment
from django.contrib.staticfiles.storage import staticfiles_storage
from django.urls import reverse
"""
确保可以使⽤jinja2模板引擎中的{{ url('') }} {{ static('') }}这类语句
<a href='/login/'></a> # 硬编码
<a href='{{url('namespace:name')}}'></a> # 软编码
"""
def environment(**options):
'''jinja2环境'''
# 创建环境对象
env = Environment(**options)
# 自定义语法:{{static('静态文件行对路径')}} {{url('路由的命名空间')}}
env.globals.update({
'static': staticfiles_storage.url, # 获取静态文件的前缀
'url': reverse, # 重定向
})
# 返回环境对象
return env
3.在settings中配置模板引擎让整个系统中识别到jinja2的模板
TEMPLATES = [
{
'BACKEND': 'django.template.backends.jinja2.Jinja2', # jinja2模板引擎
'DIRS': [os.path.join(BASE_DIR, 'templates')], # 找模板文件定义到Jinja2
'APP_DIRS': True, # True的意思:如果在上面的目录下没有找到模板文件,那就去子应用去找模板文件,如果为False就不去子应用去查找
'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',
'newsapp.mycontext.get_channels', # 添加自定义全局上下文
],
# 补充Jinja2模板引擎环境
'environment': 'newdemo.utils.jinja2_env.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',
],
},
},
]