Django学习系列之模板
2016-11-23 17:44
197 查看
什么是django模板
模板是一个文本,用于分离文档的表现形式和内容,模板定义了占位符以及各种用于规范文档该如何显示的各部分基本逻辑(模板标签)模板通常用于产生HTML
如何使用模板
创建一个Template对象传入一套变量context,调用render方法,它将返回一个基于模板的展现字符串,模板中的变量和标签会被context值替换
F:\Python\PyCharm\Project\cmdb>python manage.py shell Python 3.5.2 (v3.5.2:4def2a2901a5, Jun 25 2016, 22:18:55) [MSC v.1900 64 bit (AMD64)] on win32 Type "help", "copyright", "credits" or "license" for more information. (InteractiveConsole) >>> from django.template import Context,Template >>> t = Template('my name is {{ name }}') >>> c = Context(['name':'zhai']) >>> t.render(c) 'my name is zhai
PS:这就是使用django的的基本规则,写模板、创建Template对象,调用render()方法
模板标签
if/else标签基本语法格式如下
{% if condition %} ... display {% endif %}
或者
{% if condition1 %} ... display 1 {% elif condiiton2 %} ... display 2 {% else %} ... display 3 {% endif %}
根据条件判断是否输出,if/else支持潜逃
if标签接受and、or、not关键字来对多个变量做判断,或者对变量取反;例如:
{% if athlete_list and coach_list %} athletes 和 coaches 变量都是可用的。 {% endif %}
for标签
跟python的for一样
{% for x in y%} ... {% endfor %}
ifeqal/ifnoteqal标签
{% ifequal %} 标签比较两个值,当他们相等时,显示在 {% ifequal %} 和 {% endifequal %} 之中所有的值
下面的例子比较两个模板变量 user 和 currentuser
{% ifequal user currentuser %} <h1>Welcome!</h1> {% endifequal %}
和 {% if %} 类似, {% ifequal %} 支持可选的 {% else%} 标签
{% ifequal section 'sitenews' %} <h1>Site News</h1> {% else %} <h1>No News Here</h1> {% endifequal %}
include标签
每当多个模板中出现相同的代码时,就可以考虑使用{% include %}标签来减少重复
下面例子包含了nav.html模板
{% include "nav.html" %}
Django模板继承
本质上来说,模板继承就是先构建一个基础的模板框架,而后再其子模板中对它所包含站点公用部分和定义块进行重载
定义基础模板base.html,该框架之后将由子模板current.html集成
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>{% block title %}{% endblock %}</title> </head> <body> <h1>My helpful timestamp site</h1> {% block content %}{% endblock %} {% block footer %} <hr> <p>Thanks for visiting my site.</p> {% endblock %} </body> </html>
note:{% block %}标签就是告诉模板引擎,该模板下的这一块内容将有可能被子模板覆盖
定义子模板current.html
{% extends "includes/base.html" %} {% block title %}The current time{% endblock %} {% block content %} <p>It is now {{ current_date }}.</p> {% endblock %}
note:
在加载current.html模板时,模板引擎发现了{% extends %}标签,表示这个模板是子模板,模板引擎立即加载父模板,即base.html
此时模板引擎注意到base.html中的三个{% block %}标签,子模板里有两个{% block %},所以子模板的block会替换父模板的block内容;剩下一个block子模板中没有定义,所以用父模板的内容
相关文章推荐
- django学习系列之模板系统篇(二)
- django学习系列之模板系统篇(一)
- Django学习系列之模板系统
- Django学习笔记3-模板
- Django系列教程:[X]学习中的常见问题(不定期更新)
- (转)Django ====> 实战学习篇五 模板系统说明
- django_book学习笔记3-模板
- 数据结构学习系列五-顺序栈(c++实现且应用模板)
- Erlang学习:Django分格的模板引擎ErlyDTL
- Django学习总结之四-模板
- Django系列教程:四、模板
- The Definitive Guide To Django 2 学习笔记(五) 第四章 模板 (一)基本模板系统
- [C++再学习系列] 函数模板和类模板
- The Definitive Guide To Django 2 学习笔记(六) 第四章 模板 (二)使用模板系统
- The Definitive Guide To Django 2 学习笔记(七) 第四章 模板 (三)使用模板系统
- Django系列教程:五、模板的使用
- 数据结构学习系列三-单向循环链表(c++实现且应用模板)
- [C++再学习系列] 函数模板和类模板
- ASP.NET MVC+EF框架+EasyUI实现权限管理系列(9)-TT模板的学习
- ASP.NET MVC+EF框架+EasyUI实现权限管理系列(9)-TT模板的学习