zoukankan      html  css  js  c++  java
  • Django使用Jinja2模板引擎

    Django中,默认是使用DjangoTemplates来渲染模板,叫做DTL,可以将模板引擎更换为Jinja2

    更换模板引擎步骤:

    安装Jinja2

    要使用Jinja2,就需要有Jinja2的环境。一般Django是运行在虚拟环境中的,在虚拟环境中用pip命令安装Jinja2。

    pip install jinja2
    

    创建jinja2环境变量文件

    在项目根目录下,创建jinja2的环境变量文件,一般创建在与 setting.py 文件的同级目录中,文件名可以自定义(只要能找到即可),如 jinja2_env.py文件内容如下:

    from django.contrib.staticfiles.storage import staticfiles_storage
    from django.urls import reverse
    
    from jinja2 import Environment
    
    
    def environment(**options):
        env = Environment(**options)
        env.globals.update({
            'static': staticfiles_storage.url,
            'url': reverse,
        })
        return env
    
    

    修改setting.py 文件

    Django模板引擎的配置是在 setting.py 文件的 TEMPLATES 项。下面是配置Jinja2模板引擎和DTL模板引擎一起的配置:

    TEMPLATES = [
        {
            'BACKEND': 'django.template.backends.jinja2.Jinja2',
    
            'DIRS': [BASE_DIR / 'jinja2_templates'], # 在项目根目录创建个同名目录
            'APP_DIRS': True,
            'OPTIONS': {
                'environment': "django_day02.jinja2_env.environment", # 使用jinja2_env.py定义的环境变量
                'context_processors': [
                    'django.template.context_processors.debug',
                    'django.template.context_processors.request',
                    'django.contrib.auth.context_processors.auth',
                    'django.contrib.messages.context_processors.messages',
                ],
            },
        },
        {
            'BACKEND': 'django.template.backends.django.DjangoTemplates',
    
            'DIRS': [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',
                ],
            },
        },
    ]
    

    注意:

    Django默认生成的项目,有一个后台网站APP,也就是 django.contrib.admin。这个APP里面用到了DTL模板引擎,所以当更换引擎为Jinja2的时候,如果把原先的DTL引擎注释掉了,会报如下错误:

    ?: (admin.E403) A 'django.template.backends.django.DjangoTemplates' instance must be configured in TEMPLATES in order to use the admin application.
    

    所以,可以让DTL和Jinja2模板引擎共存。共存的话,还有个注意点:不修改原有引擎配置,新增引擎jinja2的时候,一定要把jinja2 引擎放在前面, 否则默认生效的还是django模板引擎。

    测试使用Jinja模板引擎

    定义模板 jinja2_templatesAppjinja2.html,内容:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Jinja2模板</title>
    </head>
    <body>
    {{ 1+3 }}  {# jinja的语法,支持直接写表达式 #}
    {% for i in range(10) %}  {# jinja的语法,支持直接range函数 #}
        <li>{{ i }}</li>
    {% endfor %}
    </body>
    </html>
    

    路由和视图函数

    # 路由
    path('jin/', views.load_jinja2, name="jin")
    
    # 视图函数
    def load_jinja2(request):
        return render(request, 'App/jinja2.html')
    

    浏览器访问效果:

    可以看到,Django使用Jinja2模板引擎渲染模板成功了。

  • 相关阅读:
    Autodesk Infrastructure Map Server(AIMS)/MapGuide API 培训材料第6章
    安装Vault Professional Server的一些问题
    Autodesk Infrastructure Map Server(AIMS)/MapGuide API 培训材料第2章
    C++的构造函数和析构函数
    一些常用的字符串hash函数
    类的operator new与operator delete的重载
    计算字符串的相似度(编辑距离)
    C++的重载(overload)与重写(override)
    穷举法解24点游戏
    C语言字符串库函数的实现
  • 原文地址:https://www.cnblogs.com/syushin/p/14293691.html
Copyright © 2011-2022 走看看