Python网络编程_Django
一个人退到任何一个地方都不如退到自己的内心更宁静和更少烦恼
前言
Django是一个开源代码的Web应用框架,采用了MTV模式,即模型(Model)、模板(Template)、和试图(Views)。模型:负责数据存取层,处理与数据相关的事物;模板:处理与表现相关的决定;视图:存取模型及调取恰当模板的相关逻辑。其简便、快捷的开发数据库驱动的网站,有许多强大的第三方库。以下过程和程序采用python3.7,Django3。
提示:以下是本篇文章正文内容,下面案例可供参考
五、模板
模板包含所有 HTML的部分代码以及一些特殊语法,特殊语法用于描述如何将视图传递的数据动态的插入HTML网页中。Django可以配置一个或多个,前后端分离形式则不需要,模板引擎有Django、Jinja2。
1.Django
Django内置的模板引擎包括:模板上下文(模板变量)、标签和过滤器:
模板上下文是以变量的形式写入模板文件里,
标签是对模板上下文进行输出控制
模板继承,将每个文件的重复代码抽取并写在一个共用的模板
过滤器对模板上下文进行操作处理,内容截取、替换或格式转换
1.1模板上下文
模板上下文的数据由视图函数或视图类传递,他以{{variable}}表示,variable即可以是字符串或整型,也可以是字典、列表等,当获取的内容有某个属性时,就会选择,没有时就显示为空。
1.2标签
标签是对上下文的控制,表示为{%tag%},tag是标签的名称,内置的有{%if%}、{%for%}、{%url%},具体有:
{%if%}条件判断
{%for%}遍历输出
{%with%}重新命名
{%load%}加载导入Django的标签库
{%static%}读取静态资源的文内容
使用方法如下:
{%for item in mylist%}
{{item}}
{%endfor%}
{%if item == new%}
{{item}}
{%elif item == old%}
{{item}}
{%endif%}
#不带变量的URL
<a href=>"{% url 'index' %}">首页》</a>
#带变量的URL
<a href=>"{% url 'page' 1 %}">首页》</a>
其中for的特殊使用
forloop.counter获取当前循环的索引
forloop.revcounter索引从最大数开始递减
forloop.first当遍历元素为第一项时为真
forloop.last当遍历元素为最后一项时为真
1.3继承
通过将重复内容设置模板,减少重复代码:
一个完整的模板文件通常包括,除了这两个之外都是通用的。
例如先设置base.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
{% block title %}
<title>首页</title>
{% endblock %}
<head>
{% block body %}{% endblock %}
<body>
</html>
调用方法:
{% extends "base.html" %}
{% block body %}
<a href=>"{% url 'index:index' %}">首页》</a>
<h1>Hello New
{% endblock %}
1.4过滤器
过滤器主要是对上下文的内容进行操作处理,如替换、反序和转义等。方法如下:
{{ variable | filter}}
支持多个过滤器:
{{ variable | filter | lower}}
可以传入一个参数,带参数的过滤器与参数之间用冒号隔开,并且两者之间不能留有空格。
{{ variable | date:“D d M Y”}}
2.Jinja2
增加了沙箱执行和可选的自动转义功能和可选的自动转义功能。
2.1安装配置
pip install Jinja2
Newneil中创建jinja2.py文件,在jinja2.py文件定义environment函数,利用jinja2的e、Environment进行实例化
在将environment写到配置文件settings.py中
2.2模板语法
{%for item in mylist()%}
{{item}}
{%endfor%}
{%if item == new%}
{{item}}
{%elif item == old%}
{{item}}
{%endif%}
#不带变量的URL
<a href=>"{{ url('index') }}">首页》</a>
#上下文
<div>{{ value['name']}}</div>
#使用过滤器
<div>{{ value['name'] | replace('Jinja2','Django')}}</div>