jinja2是Flask作者开发的一个模板系统,起初是仿django模板的一个模板引擎,为Flask提供模板支持,由于其灵活,快速和安全等优点被广泛使用,所以很多人即使使用Django进行开发,也会选择使用jinja2.
Jinja2有以下优点:
相对于Template,jinja2更加灵活,它提供了控制结构,表达式和继承等。 相对于Mako,jinja2仅有控制结构,不允许在模板中编写太多的业务逻辑。 相对于Django模板,jinja2性能更好。 Jinja2模板的可读性很棒。 配置Jinja2环境变量 Jinja2不支持Django默认模板引擎自带的url 和static语法,我们为了使其支持,要自己添加这个环境变量。
自定义环境变量 自定义Jinja2环境变量文件及函数,本人直接创建目录为项目目录下的utils/jinja2_env.py文件中定义的jinja2_env函数:
代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 from django.contrib.staticfiles.storage import staticfiles_storagefrom django.urls import reversefrom jinja2 import Environmentdef jinja2_env (**kwargs ): """ 使模板引擎可以使用{{ url('') }}和{{ static('') }}语句 :return: """ env = Environment(**kwargs) env.globals .update({ 'static' : staticfiles_storage.url, 'url' : reverse }) return env
setting文件中配置Jinja2模板引擎 默认用的是Django默认的模板引擎,我们这里替换成Jinja2的,并将环境变量写入其中
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 TEMPLATES = [ { 'BACKEND' : 'django.template.backends.jinja2.Jinja2' , 'DIRS' : [os.path.join(BASE_DIR, 'templates' )], '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' , ], 'environment' : 'mall_project.utils.jinja2_env.jinja2_env' , }, }, ]
配置Jinja2报错 以上配置后,我们运行该项目,直接报错,报错信息如下:
1 2 3 4 5 6 django.core.management.base.SystemCheckError: SystemCheckError: System check identified some issues: ERRORS: ?: (admin.E403) A 'django.template.backends.django.DjangoTemplates' instance must be configured in TEMPLATES in order to use the admin application. System check identified 1 issue (0 silenced).
大意是必须配置Django的默认模板引擎DjangoTemplates,那我们就配置上呗,配置在Jinja2后面总没错吧。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 TEMPLATES = [ { 'BACKEND' : 'django.template.backends.jinja2.Jinja2' , 'DIRS' : [os.path.join(BASE_DIR, 'templates' )], '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' , ], 'environment' : 'mall_project.utils.jinja2_env.jinja2_env' , }, }, { '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' , ], }, }, ]
再次运行项目,完美!!!