Bootstrap

【django】django中使用jinja2模板

1、jinja2介绍

Jinja2:是 Python 下⼀个被⼴泛应⽤的模板引擎,是由Python实现的模板语⾔,他的设计思想来源于 Django 的模板引擎,并扩展了其语法和⼀系列强⼤的功能,尤其是Flask框架内置的模板语⾔

由于django默认模板引擎功能不⻬全,速度慢,所以我们也可以在Django中使⽤jinja2, jinja2宣称⽐django默认模板引擎快10-20倍。

Django主流的第三⽅APP基本上也都同时⽀持Django默认模板及jinja2,所以要⽤jinja2也不会有多少障碍。

2、安装jinja2模块

pip install jinja2

3、Django配置jinja2

1.在应⽤包中创建 jinja2_env.py ⽂件
在这里插入图片描述

2.编辑文件

from jinja2 import Environment
def environment(**options): 
	env = Environment(**options) 
	return env

3.在settings.py⽂件中进行jinja2配置
特别注意:原配置不能删除

TEMPLATES = [
	#jinja2模板的配置
    {
        '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',
                'film.mycontext.getsname'
            ],
        'environment':'film.jinja2_env.environment'
        },
    },
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        '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',
                'film.mycontext.getsname'
            ],
        },
    },
]

4、pycharm中的setting下选择Jinja2

在这里插入图片描述

5、Jinja2模板的使⽤绝⼤多数和Django⾃带模板⼀样

在这里插入图片描述

6、测试

路由

urlpatterns = [
    path('register/',views.UserView.as_view()),
]

视图

class UserView(View):
    def delete(self,request):
        context={
            'names':['aa','bb','cc','dd']
        }
        return render(request,'film/home.html',context)

模板文件

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <ul>
        {% for name in names %}
            <li>{{ loop.index }}---{{ name }}</li>
        {% endfor %}
    </ul>
</body>
</html>

响应
在这里插入图片描述

7.Django模板和Jinja2模板区别

1、访问列表或者字典值的时候:

  • Django: {{ list.index }} {{ dict.key }}
  • Jinja2: {{ list[index] }} {{ dict[‘key’]}}

2、for循环中的局部变量(数据下标)

  • Django: forloop.counter0
  • Jinja2 : loop.index0

3、空列表

  • Django: {% empty %}
  • Jinja2 : {% else %}
;