实现在Django中使用jinja2模板,需要以下步骤:
第一步:安装jinja2
在命令行输入以下命令,安装jinja2:
pip install jinja2
第二步:配置Django项目
在Django项目的settings.py文件中,添加以下配置信息:
TEMPLATES = [
{
'BACKEND': 'django.template.backends.jinja2.Jinja2',
'APP_DIRS': True,
'OPTIONS': {
'environment': 'myproject.jinja2.environment',
},
},
]
其中,environment
指定的是使用的jinja2的环境设置,需要在项目根目录下新建一个jinja2.py文件,内容如下:
from django.conf import settings
from jinja2 import Environment
def environment(**options):
env = Environment(**options)
env.globals.update({
'STATIC_URL': settings.STATIC_URL,
'MEDIA_URL': settings.MEDIA_URL,
})
env.filters['date'] = date
return env
这里给出了一个示例,其中包含了静态文件和媒体文件的URL信息。
第三步:编写jinja2模板
在项目中新建一个templates目录,并在其中新建一个jinja2模板文件,例如示例中的example.jinja2
:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>{{title}}</title>
</head>
<body>
<h1>{{heading}}</h1>
{% if users %}
<ul>
{% for user in users %}
<li>{{ user.name }}</li>
{% endfor %}
</ul>
{% else %}
<p>No users found.</p>
{% endif %}
</body>
</html>
在此示例中,通过{{}}
包含变量,在模板中使用了if和for语句,实现了条件判断和循环输出的功能。
示例一:渲染jinja2模板
在views.py文件中,通过以下代码渲染jinja2模板:
from django.http import HttpResponse
from django.template import Context
from jinja2 import Environment, PackageLoader
def example(request):
env = Environment(loader=PackageLoader('myproject', 'templates'))
template = env.get_template('example.jinja2')
context = Context({'title': 'Example', 'heading': 'Example Heading'})
return HttpResponse(template.render(context))
其中,通过jinja2中的Environment和PackageLoader类加载jinja2模板,将上下文变量通过Context传递给模板,最终通过HttpResponse返回渲染后的HTML。
示例二:继承jinja2模板
在jinja2模板中,可以使用extends和block标签实现模板继承的功能,示例代码如下:
{% extends "base.jinja2" %}
{% block title %}
{{ super() }} - New Page Title
{% endblock %}
{% block content %}
<h1>New Page Content</h1>
{% if users %}
<ul>
{% for user in users %}
<li>{{ user.name }}</li>
{% endfor %}
</ul>
{% else %}
<p>No users found.</p>
{% endif %}
{% endblock %}
在此示例中,通过extends指定父模板,使用block标签定义子模板中需要修改的块,并通过{{ super() }}
调用父模板中相应的块内容。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Django使用jinja2模板的实现 - Python技术站