1、首先创建一个新的项目django-admin startproject jinja
2、下载一下jinja的依赖:pip install jinja2
3、进入jinja文件夹,新建一个app python manage.py startapp app
1、在app目录下创建一个jinja的基础环境,新建一个文件:base_jinja2.py
写入如下代码:
#coding:utf-8
from jinja2 import Environment # jinja2的虚拟环境
from django.contrib.staticfiles.storage import staticfiles_storage # django的一些依赖
from django.urls import reverse # urls需要和jinja进行一些配置
def environment(**options):
env = Environment(**options) # 把一些配置文件添加进去
env.globals.update({
'static': staticfiles_storage.url,
'url': reverse
})
return env
一个基础模板就创建好了。
然后我们需要将其配置进去,进入到settings,找到TEMPLATES,可以看到这里是Django的templates模板,现在我们需要将其换掉。
换成'BACKEND': 'django.template.backends.jinja2.Jinja2',
位置也改一下'DIRS': [os.path.join(base_DIR, 'templates')],
要在项目中也创建一下templates文件夹,顺便再建个static文件夹。
然后在TEMPLATEA的options中把虚拟环境也加上:
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': 'app.base_jinja2.environment'
},
},
]
加上options中’environment’那句就可以了。
app中的base_jinja2中的environment函数。
再顺便把静态文件也配置一下STATICFILES_DIRS = (os.path.join(base_DIR, 'static'),),不要忘记这是一个元组哦~
还有app也要注册哦!
三、效果在templates文件夹下建一个text.html。
然后,view中定义一个简单的函数:
from django.shortcuts import render
# Create your views here.
def test(request):
return render(request, 'text.html')
然后在根目录的urls中配置一下
from django.contrib import admin
from django.urls import path, include
from app.views import test
urlpatterns = [
path('admin/', admin.site.urls),
path('test/', test)
]
在html中随便写一点东西,启动一下试试
启动OK的。
views中定义个参数
def test(request):
data = {'name': 'cong', 'age': 18}
return render(request, 'test.html', data)
HTML中:
这个title是jinja中的函数,首字母大写
确实大写了。
在templates中新建一个base.html,把之前的base复制过来。
jinja里也可以用extends、block这些。和django模板用法差不多。
{% extends 'base.html' %}
{% block content %}
{{name|title}},{{age}}
{% endblock %}
五、区别
现在app下建一个filter文件,不过filter是Python的一个保留函数,所以使用时会出问题,还是改名成myfilter。
myfilter中定义个自定义过滤器:
def test(value, args):
return value * args
然后要在base_jinja2中配置一下:
from .myfilter import test
def environment(**options):
env = Environment(**options) # 把一些配置文件添加进去
env.globals.update({
'static': staticfiles_storage.url,
'url': reverse
})
env.filters['test'] = test
return env
把myfilter中的test函数导入进来,然后environment函数中加入env.filter['test'] = test
这里出现了两个小问题:1、from .myfilter import testmyfilter是在当前文件夹下的,导入时要加个 .
2、env. 后面是filters,不要少了s
接下来,注意:jinja和django模板的过滤器传参是不同的,jinja使用()传参
{{name|title}},{{age|test(5)}}
使用一下这个自定义过滤器,将age的value乘以5。
在static文件夹下再定义一个test.css,再写个背景颜色吧。
* {
background-color: green;
}
然后在index.html中导入css
{% extends 'base.html' %}
{% block css_style %}
{% endblock %}
这样就导入好了。django中还要load static,jinja就不用了,直接写在link 的 href中就好。
就变成绿色了。
所以,jinja是不能使用load来导入的,如果load还会报错。js文件也是一样的,写响应的static下的文件就可以了。



