Django 模板4.1

简介: Django 模板4.1

模版介绍



作为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, RequestContext
from django.http import HttpResponse
def 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 render
def index(request):
    return render(request, 'temtest/index.html')


定义模板


  • 模板语言包括


  • 变量


  • 标签 { % 代码块 % }


  • 过滤器


  • 注释{# 代码或html #}


变量


  • 语法:


{{ variable }}


  • 当模版引擎遇到一个变量,将计算这个变量,然后将结果输出
  • 变量名必须由字母、数字、下划线(不能以下划线开头)和点组成
  • 当模版引擎遇到点("."),会按照下列顺序查询:
  • 字典查询,例如:foo["bar"]
  • 属性或方法查询,例如:foo.bar
  • 数字索引查询,例如:foo[bar]
  • 如果变量不存在, 模版系统将插入'' (空字符串)
  • 在模板中调用方法时不能传递参数


在模板中调用对象的方法

  • 在models.py中定义类HeroInfo


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


  • 在views.py中传递HeroInfo对象


from django.shortcuts import render
from 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'


escape:详见“HTML转义”


  • 点击查看详细的过滤器


注释


  • 单行注释


{#...#}


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


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


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


示例


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


目录
相关文章
|
8月前
|
SQL 前端开发 JavaScript
Python 教程之 Django(10)模板
Python 教程之 Django(10)模板
77 0
|
4月前
|
Java C++ Python
django 模板 过滤器
django 模板 过滤器
|
5月前
|
前端开发 JavaScript 数据库
python Django教程 之模板渲染、循环、条件判断、常用的标签、过滤器
python Django教程 之模板渲染、循环、条件判断、常用的标签、过滤器
|
5月前
|
JSON 数据处理 API
Django后端架构开发:视图与模板的正确使用
Django后端架构开发:视图与模板的正确使用
61 1
|
5月前
|
前端开发 Python
Django模板
【8月更文挑战第19天】
38 3
|
5月前
|
自然语言处理 前端开发 数据处理
Django的模板系统
【8月更文挑战第13天】
37 2
|
5月前
|
API Java 数据库连接
从平凡到卓越:Hibernate Criteria API 让你的数据库查询瞬间高大上,彻底告别复杂SQL!
【8月更文挑战第31天】构建复杂查询是数据库应用开发中的常见需求。Hibernate 的 Criteria API 以其强大和灵活的特点,允许开发者以面向对象的方式构建查询逻辑,同时具备 SQL 的表达力。本文将介绍 Criteria API 的基本用法并通过示例展示其实际应用。此 API 通过 API 构建查询条件而非直接编写查询语句,提高了代码的可读性和安全性。无论是简单的条件过滤还是复杂的分页和连接查询,Criteria API 均能胜任,有助于提升开发效率和应用的健壮性。
182 0
|
5月前
|
前端开发 数据处理 开发者
解锁Django模板系统终极奥义!揭秘高效前端渲染秘籍,让你的网站秒变炫酷黑科技!
【8月更文挑战第31天】Django作为Python的高级Web框架,内置的模板系统支持动态HTML渲染。本文通过在线书店案例,详细介绍Django模板系统的设置与高效渲染技巧,包括创建模板文件、编写视图函数及URL配置。通过合理使用过滤器、深度查询和模板继承等技巧,提升前端渲染效率和安全性,优化Web应用开发流程。
39 0
|
5月前
|
安全 JavaScript 前端开发
Django入门到放弃之模板及标签
Django入门到放弃之模板及标签
|
7月前
|
缓存 运维 Serverless
Serverless 应用引擎产品使用合集之基于django应用模板创建的FC,如何配置数据库
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。