一、模板的配置、绑定与渲染
1.模板的简介
模板可以动态生成html网页,它包括部分html代码和一些特殊的语法
2.template配置方法
- 一般存放在templates目录中
- 通过在项目settings的templates的DIRS列表中添加对应的路径即可,如os.path.join(BASE_DIR,’templates’)
3.template与视图的绑定
- 通过 from django.shortcuts import render 模块
- return render(request,template_path,{k:v}) 字典中的key和value就是要向前端渲染出来的数据
4.template展示渲染的数据
在html中以{{}}为标识,在双大括号中传入视图中传入的数据
5.实战举例
- 创建一个django项目:django-admin startproject template
- 进入项目目录:cd template/后,创建一个应用app:python3 manage.py startapp app
- 打开项目后,在该项目下创建一个文件夹templates,如下:

4.在项目根目录下的settings.py文件下,设置templates的DIRS:
5.在应用app中创建一个url.py文件,定义url:
from django.urls import pathfrom .views import Indexurlpatterns=[path('',Index.as_view())]
6.在应用中创建一个视图函数:
from django.shortcuts import renderfrom django.views.generic import View# Create your views here.class Index(View):TEMPLATE='index.html'def get(self,request,name):return render(request,self.TEMPLATE)
7.在根目录下的路由urls.py注册app的url:
from django.contrib import adminfrom django.urls import path,includefrom app import urls as app_urlsurlpatterns = [path('admin/', admin.site.urls),path('',include(app_urls))]
8.app应用下的url绑定视图:
from django.urls import pathfrom .views import Indexurlpatterns=[path('',Index.as_view())]
9.在新创建的模板文件下创建一个简单的html文件:
<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>Title</title></head><body>hello {{name}}</body></html>
10.启动本地服务,在浏览器中输入对应地址查看对应模板数据:python3 manage.py runserver
输入:http://127.0.0.1:8000/后查看到:
【拓展】在模板中展示渲染数据:
from django.shortcuts import renderfrom django.views.generic import View# Create your views here.class Index(View):TEMPLATE='index.html'def get(self,request,name):return render(request,self.TEMPLATE,{'name':name})
from django.urls import pathfrom .views import Indexurlpatterns=[path('<str:name>',Index.as_view())]
<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>Title</title></head><body>hello {{name}}//双大括号表示</body></html>
结果为:
二、template的内置标签与静态配置
1.变量与标签
- 变量用{{}}双大括号包裹,比如后端渲染过来的数据
- 内置标签类型,用{%%}大括号左右各一个百分号包裹


2.静态文件配置
- 项目根目录创建‘static’与‘template’文件夹同级
- STATICFILES_DIRS=(os.path.join(BASE_DIR,’static’),)
静态文件包括:
- css样式文件
- JavaScript文件
- image图片文件等
3.静态文件配置与内置标签代码演示
3.1 内置标签代码演示
编写一个视图函数:
编写一个index.html的前端页面:(包含了上述几种内置标签)
<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>Title</title></head><body><h1>hello {{name}}</h1><ul>{% for item in array %}<li>{{ item }}---{{ forloop.counter0 }}---{{ forloop.counter }}----{{ forloop.revcounter }}----{{ forloop.revcounter0 }}{% if forloop.first %}is first{% elif forloop.last %}is last{% endif %}</li>{% empty %}<li>is empty</li>{% endfor %}</ul><a href="{% url 'index' 'conan' %}">return</a></body></html>
结果如下图:
点击return后结果:
3.2 静态文件配置代码演示
在static文件夹中新建一个css文件:
*{margin:0;padding: 0;}
在模板文件夹中新建一个base html文件:
<!DOCTYPE html><html lang="en"><head>{% block head %}<meta charset="UTF-8"><title>{% block title %}{% endblock %}</title>{% block css_style %}{% endblock %}{% endblock %}</head><body>{% block content %}{% endblock %}{% block js_script %}{% endblock %}</body></html>
编写index的html文件:
{% extends 'base.html' %}{% load static %}{% block css_style %}<link rel="stylesheet" href="{% static 'index.css' %}">{% endblock %}{% block title %}test{% endblock %}{% block content %}<h1>hello {{ name }}</h1><ul>{% for item in array %}<li>{{ item}}</li>{% endfor %}</ul>{% endblock %}
结果:
setting文件中配置静态文件:
STATIC_URL = '/static/'STATICFILES_DIRS=(os.path.join(BASE_DIR,'static'),)
三、模板内置过滤器
1.过滤器的用处
- 用于在html模板中,对于渲染过来的数据进行二次操作使用
- 用来处理这些数据的模板引擎中使用的函数
2.常用过滤器介绍


常用过滤器实践说明:
from django.shortcuts import renderfrom django.views.generic import Viewimport datetime# Create your views here.class Index(View):TEMPLATE='index.html'def get(self,request,name):data={}data['name']=namedata['array']=range(10)data['count']=20data['time']=datetime.datetime.now()data['cut_str']='hello-girl!'data['first_big']='hello django!'data['result']=Falsedata['dict_list']=[{'name':'test1','age':28},{'name':'test2','age':18}]data['float_num']=3.1415926data['html_str']='<div style="background-color:red;width:50px;height:50px"></div>'data['a_str']='请看 www.baidu.com'data['feature']=data['time']+datetime.timedelta(days=5)#data['array']=[]return render(request,self.TEMPLATE,data)
{% extends 'base.html' %}{% load static %}{% block css_style %}<link rel="stylesheet" href="{% static 'index.css' %}">{% endblock %}{% block title %}test{% endblock %}{% block content %}<h1>hello {{ name }}</h1><ul>{% for item in array %}<li>{{ item}}</li>{% endfor %}</ul><br/><label>add:</label>{{ count|add:10 }}<br/><label>date:</label>{{ time|date:"Y-m-d H:i:s" }}<br/><label>cut:</label>{{ cut_str|cut:'-' }}<br/><label>first_big:</label>{{ first_big|capfirst }}<br/><label>default:</label>{{ result|default:"空列表" }}<br/><label>default_if_none:</label>{{ result|default_if_none:"none为空" }}<br /><label>dictsort:</label>{{ dic_list|dictsort:'age' }}<br /><label>dictsortreversed:</label>{{ dict_list|dictsortreversed:'age' }}<br /><label>first:</label>{{ dict_list|first }}<br /><label>last:</label>{{ dict_list|last }}<br /><label>floatformat:</label>{{ float_num|floatformat:4 }}<br /><label>join:</label>{{ array|join:"-" }}<br /><label>length:</label>{{ dict_list|length }}<br /><label>divisibleby:</label>{{ count|divisibleby:3 }}<br /><label>length_is:</label>{{ dict_list|length_is:2 }}<br /><label>safe:</label>{{ html_str|safe }}<br /><label>random:</label>{{ dict_list|random }}<br /><label>slice:</label>{{ html_str|slice:":10" }}<br /><label>slugify:</label>{{ html_str|slugify }}<br /><label>upper:</label>{{ html_str|upper }}<br /><label>urlize:</label>{{ a_str|urlize }}<br /><label>wordcount:</label>{{ first_big|wordcount }}<br /><label>timeuntil:</label>{{ feature|timeuntil }}{% endblock %}
运行结果如下:
3.自定义过滤器
定义自定义函数规则:
- 在应用下创建templatetags文件夹
- 在文件夹下创建myfilter.py
举例:
from django import templateregister=template.Library()#定义过滤器@register.filterdef test_filter(value,args):return value+args
{%load myfilter%}{{data |test_filter:3}}
四、其他模板介绍
1.jinja2简介
- 一套模仿Django模板的模板引擎,使用场景和Django模板相似
- 由flask开发者开发
- 速度快,被广泛使用
- 提倡让html设计者和后端Python开发工作分离
2.jinja2常用过滤器
3.mako简介
- 有比jinja更快的解析速度已经更多的语法支持
- 最大的特点在于允许你在html中随笔书写python代码
