环境:Django 3.2
解释:在主项目目录(里面有asgi.py)下面创建jinja2.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, # 模板出现static,调用url函数
'url':reverse # 模板出现url,调用reverse函数
})
return env # 返回修改后的环境变量
注意:DIRS表示去那里寻找模板,这里要指定到具体项目下面去找,不然找不到,然后就使用成Django的模板了
TEMPLATES = [
{
'BACKEND': 'django.template.backends.jinja2.Jinja2',
'DIRS': [os.path.join(BASE_DIR, 'test/templates')],
'APP_DIRS': True,
'OPTIONS': {
'environment': 'testDjango.jinja2.environment',
},
},
{
'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',
],
},
},
]
导入:from django.shortcuts import render
用法:
参数:locals()自动把上面的内容包括进去
关键:此处的locals()方法最像flask里面使用的
con = {'value': "这是jinja2"}
return render(request, 'testWeb/index.html', locals()) #locals()能包含多个字典
#注意这个路径问题,应该为/templates/app名字/文件名,不这样的话可以会寻找出错
# 区别:模板里面调用value{{ con.value }}
或
con = {'value': "这是jinja2"}
# 注意都con是字符串或者数字等单个内容会报错
# 注意最好就写字典这种结构
return render(request, 'testWeb/index.html', context=con)
#注意这个路径问题,应该为/templates/app名字/文件名,不这样的话可以会寻找出错
# 区别:模板里面调用value{{ value }}
解释:‘in:go’ (都在项目urls.py里面)
app_name='in'
path('go',views.go,name='go')
<a href="{{ url('in:go') }}">Administration</a>
解释:其会去项目下面的static里面寻找该图片
<img src="{{static('logo.png')}}">
注意:容易出现同名找寻同一个的错误
解决:在templates下再创建一个目录,这样不会找错,可以同名
例如:
return render(request, 'testQQ/results.html', {'question': question})