模板简介

  将页面的设计和python的代码分离开会更干净简洁更容易维护。我们可以使用Django的模板系统来实现这种模式

  python的模板:HTML代码+模板语法

  模板包括在使用时会被值替换掉的变量,和控制模板逻辑的标签

变量

  在Django模板中遍历复杂数据结构的关键是句点字符

{#语法#}   {{ var_name }}

  views

def index(request):
import datetime
s='hello'
l=[1,2,3]
dic={"name":'lary',"age":18}
date = datetime.date(2000,3,12) class Person(object):
def __init__(self,name):
self.name = name person_l=Person("lily")
person_j=Person('jerry')
person_t=Person('tom') person_li=[person_l, person_j, person_t] return render(request,'index.html',{"l":l,"dic":dic,"date":date,"person_list":person_li,"s":s})

  template

<body>
<h4>{{ s }}</h4>
<h4>{{ l.0 }}</h4>
<h4>{{ dic.name }}</h4>
<h4>{{ date.year }}</h4>
<h4>{{ person_list.0.name}}</h4>
{#句点符也可以用来引用对象的方法(无参数方法)#}
<h4>{{ dic.name.upper }}</h4>

模板之过滤器

  语法

{{obj|filter_name:param}}

default

  如果一个变量是false或者为空,使用给定的默认值。否则,使用变量的值

{{value|default:"nothing"}}

length

  返回值的长度。它对字符串和列表都起作用

{{value|length}}

filesizeformat

  将值格式化为一个可读的文件尺寸

{{value|filesizeformat}}

date

{#如果value=datetime.datetime.now()#}
{{value|date:"Y-m-d"}}

slice

{#如果value="hello world"#}
{{value|slice:"2:-1"}}

truncatechars

  如果字符串多于指定的字符数量,那么会被截断。截断的字符串将以省略号(“...”)结尾

{{value|truncatechars:9}}

safe

  Django模板中会对HTML标签和js等语法进行自动转义,这样是为了安全。但是有的时候我们可能不希望这些HTML元素被转义,为了在Django中关闭HTML的自动转义的两种方式,如果是一个单独的变量可以通过"|safe"的方式告诉Django这段代码是安全的不必转义

value="<a href="">点击</a>"
{{value|safe}}

autoescape

  控制当前的自动转义行为,此标记采用on或者off作为参数,并确定自动转义是否在块内有效。该块以endautoescape结束标签关闭

def generate_report(request):
report_name = "this is a test report"
report_tilte = "<h1>this is a title</h1>"
return render(request, 'report.html', locals())

开启转义

{% autoescape on %}
{{ report_title }}
{% endautoescape %}

关闭转义,默认该语句块中的内容是安全的

{% autoescape off %}
{{ report_title }}
{% endautoescape %}

模板之标签

  标签比变量更加复杂:一些在输出中创建文本,一些通过循环或逻辑来控制流程,一些加载其后的变量将使用到额外信息到模板中,一些变迁需要开始和结束标签

for标签

{#遍历每一个元素#}
<h4>{{ dic.name.upper }}</h4>
{% for person in person_list %}
<p>{{ person.name }}</p>
{% endfor %} {#遍历字典#}
{% for key,val in dic.items %}
<p>{{ key }}:{{ val }}</p>
{% endfor %} {#循环序号#}
{{forloop.counter}}

for...empty

  for标签带有一个可选的{% empty%}从句,以便在给出的组是空的或者没有被找到时,可以有所操作

{#for empty#}
{% for person in person_list %}
<p>{{ person.name }}</p>
{% empty %}
<p>sorry,no person here</p>
{% endfor %}

if标签

  if标签会对一个变量求值,如果它的值是true,对应的内容块会输出

{#if标签#}
{% if num > 100 or num < 0 %}
<p>无效</p>
{% elif num > 80 and num < 100 %}
<p>优秀</p>
{% else %}
<p>一般</p>
{% endif %}

with  

  使用一个简单的名字缓存一个复杂的变量,当你需要使用一个方法很多次的时候是非常有用的

{#with标签#}
{% with total=business.employees.count %}
{{ total}}employee{{ tatal|pluralize }}
{% endwith %}

csrf_token

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

{#csrf_token#}
{% csrf_token %}

自定义标签和过滤器

  在settings中的INSTALLED_APPS配置当前app

  在app中创建templatetags模块

  创建任意.py文件,如my_tags.py

from django import template
from django.utils.safestring import mark_safe register = template.Library() @register.filter
def filter_multi(x,y):
return x*y @register.simple_tag
def simple_tag_multi(x,y):
return x*y @register.simple_tag
def my_input(id,args):
result="<input type='text' id='%s' class='%s'/>"%(id,args,)
return mark_safe(result)

  在使用自定义simple_tag和fileter的html文件中导入之前创建的my_tag.py

{% load my_tag %}

  使用simple_tag和filter

{{ num|filter_multi:2 }}
{{ num|filter_multi:"[22,33,444]" }}
{#参数不限,但不能放在if for语句中#}
{% simple_tag_multi 2 5 %}
{% simple_tag_multi num 5 %} {#filter可以用在if等语句后,simple_tag不可以#}
{% if num|filter_multi:30 > 100 %}
{{ num|filter_multi:30 }}
{% endif %}

  

Django框架详解之template的更多相关文章

  1. Django框架详解之url

    Django基本命令 下载Django pip3 install django 创建一个django project django-admin.py startproject cms 当前目录下会生成 ...

  2. Django框架详解

    一.WSGI接口 WSGI服务网关接口:Web Server Gateway Interface缩写. WSGI是python定义的Web服务器和Web应用程序之间或框架之间的通用接口标准. WSGI ...

  3. Django框架详解之views

    一个简单的视图 一个视图函数,是一个简单的python函数,它接受web请求并且返回web响应.无论视图本身包含什么逻辑,都要返回响应.为了将代码放在某处,约定是将视图放置在项目或应用程序目录中的名为 ...

  4. Django -- settings 详解

    Django settings详解 1.基础 DJANGO_SETTING_MODULE环境变量:让settings模块被包含到python可以找到的目录下,开发情况下不需要,我们通常会在当前文件夹运 ...

  5. Django -- settings 详解(转)

    Django -- settings 详解   Django settings详解 1.基础 DJANGO_SETTING_MODULE环境变量:让settings模块被包含到python可以找到的目 ...

  6. Django 2.0 学习(20):Django 中间件详解

    Django 中间件详解 Django中间件 在Django中,中间件(middleware)其实就是一个类,在请求到来和结束后,Django会根据自己的规则在合适的时机执行中间件中相应的方法. 1. ...

  7. jQuery Validate验证框架详解

    转自:http://www.cnblogs.com/linjiqin/p/3431835.html jQuery校验官网地址:http://bassistance.de/jquery-plugins/ ...

  8. mina框架详解

     转:http://blog.csdn.net/w13770269691/article/details/8614584 mina框架详解 分类: web2013-02-26 17:13 12651人 ...

  9. lombok+slf4j+logback SLF4J和Logback日志框架详解

    maven 包依赖 <dependency> <groupId>org.projectlombok</groupId> <artifactId>lomb ...

随机推荐

  1. 远程连接windows出现身份验证错误,提示"由于CredSSP加密Oracle修正"解决方案

    本机操作系统(OS版本:10.0.17134) 远程计算机操作系统(OS版本:6.3.9600) 远程连接的时候报错“出现身份验证错误,要求的函数不受支持.远程计算机:xxx 这可能是由于CredSS ...

  2. JS 实现1!+2!+3!+4!+5!+....+n!

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  3. php实现多图上传功能

    总共三个文化  index.html   conn.php  upload.php index.html代码: <html> <head>上传文件</head> & ...

  4. web service服务是查询QQ用户是否在线

    使用php5开发客户端: <?php try { //$client = new SoapClient("HelloService.wsdl",array('encoding ...

  5. Flex简易教程

      常见的前端布局模型涵盖浮动.定位和弹性盒等 CSS 技术,其中浮动和定位技术往往在制作自适应布局页面时显得不够优雅--对于浮动布局,前后端分离时代很多时候我们并不知道每行会遍历显示多少个元素,每个 ...

  6. python第六周:面向对象编程

    面向对象编程: 世界万物,皆可分类 世界万物,对象 只要是对象,就肯定属于某种品类 只要是对象,就肯定有属性 oop编程利用"类"和"对象"来创建各种模型来实现 ...

  7. Ubuntu下安装Tensorflow

    本文目录 引言 基于Anaconda的tensorflow安装 1 下载linux版本的Anaconda安装包 2 安装Anaconda 利用anaconda安装tensorflow 1 建立一个 c ...

  8. Oracle中Cursor介绍和使用

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/MyDreamNeverstop/article/details/78604033 一  概念  游标 ...

  9. 排序算法Python(冒泡、选择、快速、插入、希尔、归并排序)

    排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存. 我们通常所说的排序算法往往指的是内部排序算法,即数据 ...

  10. wordpress迁移以及遇到的一些问题[mysql备份导入导出][固定链接404]

    总的问题有两个,一是apache的配置,二是mysql的导出和导入.以及迁移后遇到的一些问题解决过程和方法. A机器为老server.B为新server,A机器使用Appserv,B使用wmap,在配 ...