Django 模板4.1(django官方文档)

网友投稿 853 2022-09-05


Django 模板4.1(django官方文档)

模板介绍

作为Web框架,Django提供了模板,可以很便利的动态生成HTML模版系统致力于表达外观,而不是程序逻辑模板的设计实现了业务逻辑(view)与显示内容(template)的分离,一个视图可以使用任意一个模板,一个模板可以供多个视图使用模板包含

HTML的静态部分动态插入内容部分

Django模板语言,简写DTL,定义在django.template包中由startproject命令生成的settings.py定义关于模板的值:

DIRS定义了一个目录列表,模板引擎按列表顺序搜索这些目录以查找模板源文件APP_DIRS告诉模板引擎是否应该在每个已安装的应用中查找模板

常用方式:在项目的根目录下创建templates目录,设置DIRS值

DIRS=[os.path.join(BASE_DIR,"templates")]

模板处理

Django处理模板分为两个阶段Step1 加载:根据给定的标识找到模板然后预处理,通常会将它编译好放在内存中

loader.get_template(template_name),返回一个Template对象

Step2 渲染:使用Context数据对模板插值并返回生成的字符串

Template对象的render(RequestContext)方法,使用context渲染模板

加载渲染完整代码:

from django.template import loader, RequestContextfrom django.import HttpResponsedef index(request): tem = loader.get_template('temtest/index.html') context = RequestContext(request, {}) return HttpResponse(tem.render(context))

快捷函数

为了减少加载模板、渲染模板的重复代码,django提供了快捷函数render_to_string("")render(request,'模板',context)

from django.shortcuts import renderdef index(request): return render(request, 'temtest/index.html')

定义模板

模板语言包括

变量标签 { % 代码块 % }过滤器注释{# 代码或html #}

变量

语法:

{{ variable }}

当模版引擎遇到一个变量,将计算这个变量,然后将结果输出变量名必须由字母、数字、下划线(不能以下划线开头)和点组成当模版引擎遇到点("."),会按照下列顺序查询:

字典查询,例如:foo["bar"]属性或方法查询,例如:foo.bar数字索引查询,例如:foo[bar]

如果变量不存在, 模版系统将插入'' (空字符串)在模板中调用方法时不能传递参数

在模板中调用对象的方法

在models.py中定义类HeroInfo

from django.db import modelsclass HeroInfo(models.Model): ... def showName(self): return self.hname

在views.py中传递HeroInfo对象

from django.shortcuts import renderfrom models import *def index(request): hero = HeroInfo(hname='abc') context = {'hero': hero} return render(request, 'temtest/detail.html', context)

在模板detail.html中调用

{{hero.showName}}

标签

语法:{ % tag % }作用

在输出中创建文本控制循环或逻辑加载外部信息到模板中供以后的变量使用

for标签

{ %for ... in ...%}循环逻辑{{forloop.counter}}表示当前是第几次循环{ %empty%}给出的列表为或列表不存在时,执行此处{ %endfor%}

if标签

{ %if ...%}逻辑1{ %elif ...%}逻辑2{ %else%}逻辑3{ %endif%}

comment标签

{ % comment % }多行注释{ % endcomment % }

include:加载模板并以标签内的参数渲染

{ %include "foo/bar.html" % }

url:反向解析

{ % url 'name' p1 p2 %}

csrf_token:这个标签用于跨站请求伪造保护

{ % csrf_token %}

布尔标签:and、or,and比or的优先级高block、extends:详见“模板继承”autoescape:详见“HTML转义”

过滤器

语法:{ { 变量|过滤器 }},例如{ { name|lower }},表示将变量name的值变为小写输出使用管道符号 (|)来应用过滤器通过使用过滤器来改变变量的计算结果可以在if标签中使用过滤器结合运算符

if list1|length > 1

过滤器能够被“串联”,构成过滤器链

name|lower|upper

过滤器可以传递参数,参数使用引号包起来

list|join:", "

default:如果一个变量没有被提供,或者值为false或空,则使用默认值,否则使用变量的值

value|default:"什么也没有"

date:根据给定格式对一个date变量格式化

value|date:'Y-m-d'

注释

单行注释

{#...#}

注释可以包含任何模版代码,有效的或者无效的都可以

{# { % if foo % }bar{ % else % } #}

使用comment标签注释模版中的多行内容

示例

查询所有英雄信息显示出来,要求奇数行显示为红色,偶数行显示为蓝色


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Django 模板继承4.2(django和flask的区别)
下一篇:java面向对象继承与多态介绍
相关文章

 发表评论

暂时没有评论,来抢沙发吧~