Django中级篇之模板语言
模板
一、引用变量
模版的创建过程,对于模版,其实就是读取模版(其中嵌套着模版标签),然后将 Model 中获取的数据插入到模版中,最后将信息返回给用户。
{{ xxx }}
二、标签
用{% %}表示,用于处理一些逻辑
常用的几个标签 {% if 条件 %}
内容
{% endif %} {% for xxx in 条件 %}
{{xxx}}
{% endfor %}
1、for标签
1>每一次循环中,模板系统会渲染在 {% for %} 和 {% endfor %} 之间的所有内容
2> 给标签增加一个 reversed 使得该列表被反向迭代
{% for athlete in athlete_list reversed %}
3>可以嵌套使用 {% for %} 标签
4> Django不支持退出循环操作。 如果我们想退出循环,可以改变正在迭代的变量,让其仅仅包含需要迭代的项目。 同理,Django也不支持continue语句,我们无法让当前迭代操作跳回到循环头部。
5>在每个`` {% for %}``循环里有一个称为`` forloop`` 的模板变量。这个变量有一些提示循环进度信息的属性。
富有魔力的forloop变量只能在循环中得到,当模板解析器到达{% endfor %}时forloop就消失了
forloop.counter 总是一个表示当前循环的执行次数的整数计数器 forloop.counter0 类似于forloop.counter ,但是它是从0计数的 forloop.first是一个布尔值;在第一次执行循环时被置为True forloop.last 是一个布尔值;在最后一次执行循环时被置为True
2、if标签
1>{% if %}标签计算一个变量值,如果是“true”,即它存在、不为空并且不是false的boolean值 系统则会显示{% if %}和{% endif %}间的所有内容
2>没有{% elif %}标签,使用嵌套的{% if %}标签可以做到同样的事情
3>{% if %}标签接受and,or或者not来测试多个变量值或者否定一个给定的变量
4>{% if %}标签不允许同一标签里同时出现and和or,否则逻辑容易产生歧义
5>如果你想结合and和or来做高级逻辑,只需使用嵌套的{% if %}标签即可
6>多次使用同一个逻辑符号是合法的
三、模板继承
模板可以用继承的方式来实现复用。在整个网站中,减少共用页面区域(比如站点导航)所引起的重复和冗余代码
本质上来说,模板继承就是先构造一个基础框架模板,而后在其子模板中对它所包含站点公用部分和定义块进行重载,第一步是定义 基础模板 , 该框架之后将由子模板所继承
母版:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>{% block title %}久久寻网{% endblock %}</title>
<link type="text/css" rel="stylesheet" href="style.css" />
</head>
<body>
<div id="side">
{% block side %}
<ul>
<li><a href="/index.html">主页</a></li>
<li><a href="/blog/index.html">博客</a></li>
</ul>
{% endblock %}
</div>
<div id="content">
{% block content %}{% endblock %}
</div>
</body>
</html>
我们称它为 base.html, 定义了一些简单的 HTML 骨架文档, 你可以把它用到一些简单两列的网页上. “子” 模板的任务就是用内容填写这些空白的内容块
子版:
{% extends "text.html" %}
{% block title %}修改标题{% endblock %} {% block side %}
<ul>
<li><a href="/index.html">修改后主页</a></li>
<li><a href="/blog/index.html">修改后博客</a></li>
</ul>
{% endblock %} {% block content %} <h1>新增加内容</h1> {% endblock %}
1>{% extends "text.html" %}表示导入母版
2> 每个{% block %}标签所要做的是告诉模板引擎,该模板下的这一块内容将有可能被子模板覆盖,而不一定一定要覆盖掉母版中的内容
四、注释标签
1. Django单行注释使用 {# 这是一个注释 #}
用这种语法的注释不能跨越多行, 这个限制是为了提高模板解析的性能。 在下面这个模板中,输出结果和模板本身是 完全一样的(也就是说,注释标签并没有被解析为注释):
This is a {# this is not
a comment #}
test.
2. 实现多行注释,可以使用`` {% comment %}`` 模板标签
{% comment %}
This is a
multi-line comment.
{% endcomment %}
五、过滤器
1>模板过滤器可以在变量被显示前修改它,过滤器使用管道字符,如下所示:
{{ name|lower }}
2>过滤管道可以被* 套接* ,既是说,一个过滤器管道的输出又可以作为下一个管道的输入:
{{ my_list|first|upper }}
六、ifequal/ifnotequal 标签
1. {% ifequal %} 标签比较两个值,当他们相等时,显示在 {% ifequal %} 和 {% endifequal %} 之中所有的值下面的例子比较两个模板变量 user 和 currentuser :
{% ifequal user currentuser %}
<h1>Welcome!</h1>
{% endifequal %}
自定义simple_tag
a、在app中创建templatetags模块
b、创建任意 .py 文件,如:xx.py
#!/usr/bin/env python #coding:utf- from django import template from django.utils.safestring import mark_safe from django.template.base import resolve_variable, Node, TemplateSyntaxError register = template.Library() @register.simple_tag def my_simple_time(v1,v2,v3): return v1 + v2 + v3 @register.simple_tag def my_input(id,arg): result = "<input type='text' id='%s' class='%s' />" %(id,arg,) return mark_safe(result)
c、在使用自定义simple_tag的html文件中导入之前创建的 xx.py 文件名
{% load xx %}
d、使用simple_tag
{% my_simple_time 1 2 3%} {% my_input 'id_username' 'hide'%}
e、在settings中配置当前app,不然django无法找到自定义的simple_tag
INSTALLED_APPS = ( 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'app01', )
Django中级篇之模板语言的更多相关文章
- Django实战(二)之模板语言
该实战教程基于菜鸟教程,菜鸟教程可参考:http://www.runoob.com/django/django-template.html 模板语法,每个框架都有其支持的模板语法,Django的模板语 ...
- Django学习之 - 基础模板语言
模板语言if/else/endif {% if today_is_weekend %} <p>Welcome to the weekend!</p> {% else %} &l ...
- Django中级篇(下)
中间件 django 中的中间件(middleware),在django中,中间件其实就是一个类,在请求到来和结束后,django会根据自己的规则在合适的时机执行中间件中相应的方法. MIDDLEWA ...
- Django中级篇之Model专题
ORM 就是用面向对象的方式去操作数据库的创建表以及增删改查等操作 到目前为止,当我们的程序涉及到数据库相关操作时,我们一般都会这么搞: 创建数据库,设计表结构和字段 使用 MySQLdb 来连接数据 ...
- django 实战篇之模板层
模板层 {{}} 变量相关 {%%} 逻辑相关 前端获取容器类型的数据统一使用 句点符(.) 两种给模板传递值的方式 return render(request,'index.html ...
- Django中级篇(上)
Form验证 django中的Form一般有两种功能: 输入html-----------不能你自己写一些标签,而帮你自动生成 验证用户输入-------将用户验证信息保存起来,可以传到前段 #!/u ...
- Django模板语言详解
本节将介绍Django模版系统的语法.Django模版语言致力于在性能和简单性上取得平衡. 如果你有过其它编程背景,或者使用过一些在HTML中直接混入程序代码的语言,那么你需要记住,Django的模版 ...
- [Python自学] day-18 (2) (MTV架构、Django框架、模板语言)
一.实现一个简单的Web服务器 使用Python标准库提供的独立WSGI服务器来实现MVC架构. 首先,实现一个简单的Web服务器: from wsgiref.simple_server import ...
- 第三章:模版层 - 1:Django模板语言详解
本节将介绍Django模版系统的语法.Django模版语言致力于在性能和简单性上取得平衡. 如果你有过其它编程背景,或者使用过一些在HTML中直接混入程序代码的语言,那么你需要记住,Django的模版 ...
随机推荐
- Bind 跨域名别名解析的问题
我有一个域名 aaa.net 已经生效 ,并且下面有 xx的 A记录:现在我还有一个 aaa.com域名 ,我想用 别名方式把它下面 某个 记录以别名方式解析到 xx.aaa.net上去.应该在aaa ...
- [系统开发] Postfix 邮件管理系统
一.简介 开发时间:2012年 开发工具:Perl CGI 这是我开发的 Postfix 邮件管理系统,通过它可以安全.方便的对邮件域名.用户.权限.组.邮箱容量.安全等进行各种设置:界面样式借鉴了 ...
- Linux LVM简明教程
逻辑卷管理LVM是一个多才多艺的硬盘系统工具.无论在Linux或者其他类似的系统,都是非常的好用.传统分区使用固定大小分区,重新调整大小十分麻烦.但是,LVM可以创建和管理“逻辑”卷,而不是直接使用物 ...
- PHP 正则表达式常用函数使用小结
在PHP中有两套正则表达式函数库.一套是由PCRE(Perl Compatible Regular Expression)库提供的.PCRE库使用和Perl相同的语法规则实现了正则表达式的模式匹配,其 ...
- python-unicode十进制数字转中文
#coding:utf-8 '''主要是unichr()函数.以下数组中的元素转换后为繁体中文,若不加encode("GB18030")就不能正确显示,而且会报错:('gbk' c ...
- 2016 Multi-University Training Contest 4 Bubble Sort(树状数组模板)
Bubble Sort 题意: 给你一个1~n的排列,问冒泡排序过程中,数字i(1<=i<=n)所到达的最左位置与最右位置的差值的绝对值是多少 题解: 数字i多能到达的最左位置为min(s ...
- NeHe OpenGL教程 第十六课:雾
转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...
- IDC机房网络测试要求
IDC机房网络质量要求: 我司项目目前覆盖目标机房是国内BGP机房.三线机房.电信机房.联通机房. 要求XXXX IDC机房到目标机房的网络质量,平均丢包≤0.5%,网络延迟≤50ms;高峰期平均丢包 ...
- Python 汉字转拼音库 pypinyin
一.初衷: 一些开源软件的配置文件中识别区分的部分用英文,那么我们在批量生成配置文件的时候,可以从CMDB导入汉字(idc_name), 然后将它转换成拼音,再或者拼接上IP地址,以便更准确的识别.例 ...
- 转_IOS开源
http://www.csdn.net/article/2013-06-05/2815530-GitHub-iOS-open-source-projects-one 苹果App Store本身所具有的 ...