模板

一、引用变量

模版的创建过程,对于模版,其实就是读取模版(其中嵌套着模版标签),然后将 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是一个布尔值;在第一次执行循环时被置为Trueforloop.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-8from django import templatefrom django.utils.safestring import mark_safefrom django.template.base import resolve_variable, Node, TemplateSyntaxErrorregister = template.Library()@register.simple_tagdef my_simple_time(v1,v2,v3):return  v1 + v2 + v3@register.simple_tagdef my_input(id,arg):result = "<input type='text' id='%s' class='%s' />" %(id,arg,)return mark_safe(result)

View Code

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',)

View Code

转载于:https://www.cnblogs.com/luxiaojun/p/5818567.html

Django中级篇之模板语言相关推荐

  1. python框架django文档_Django基础——Django框架介绍及模板语言

    Django框架,我们只需要关心二点: 1.根据用户访问不同的路径执行不同的函数 2.从HTML读取出内容,并且完成字符串的替换 而socket通信不需要我们自己写: 新建Django项目 命令行创建 ...

  2. Django模板语言(译)

    原文地址:https://docs.djangoproject.com/zh-hans/2.1/ref/templates/language/ 翻译日期:2019年3月8日-2019年3月9日 by: ...

  3. Django框架学习 —9模板详解 -- DTL

    作为Web框架,Django提供了模板,用于编写html代码,还可以嵌入模板代码更快更方便的完成页面开发,再通过在视图中渲染模板,将生成最终的html字符串返回给客户端浏览器 模板致力于表达外观,而不 ...

  4. Django之ORM使用以及模板语言

    一.ORM版增删改查 1.ORM的语句 1.类名.objects.all()          --> 返回一个列表 2.类名.objects.filter()       --> 返回一 ...

  5. 第三百一十节,Django框架,模板语言

    第三百一十节,Django框架,模板语言 模板语言就是可以将动态数据在html模板渲染的语言 一.接收值渲染 locals()函数,写在请求响应render()函数里,可以将逻辑处理函数里的变量传到h ...

  6. Django模板语言

    常用语法 只需要记两种特殊符号: {{  }}和 {% %} 变量相关的用{{}},逻辑相关的用{%%}. 变量 {{ 变量名 }} 变量名由字母数字和下划线组成. 点(.)在模板语言中有特殊的含义, ...

  7. Django(模板语言-自定义filter和simple_tag)

    filter过滤器的主要形式:变量|函数,意思是将变量交给函数处理,而自定义filter就是自己定义函数,因为用到已有的很少. 1.在当前app中创建templatetags模块(包:带__init_ ...

  8. Django模板语言中的自定义方法filter过滤器实现web网页的瀑布流

    模板语言自定义方法介绍 自定义方法注意事项 Django中有simple_tag 和 filter 两种自定义方法,之前也提到过,需要注意的是 扩展目录名称必须是templatetags templa ...

  9. Flask最强攻略 - 跟DragonFire学Flask - 第四篇 Flask 中的模板语言 Jinja2 及 render_template 的深度用法

    https://www.cnblogs.com/DragonFire/p/9259999.html 是时候开始写个前端了,Flask中默认的模板语言是Jinja2 现在我们来一步一步的学习一下 Jin ...

最新文章

  1. 程序员Web面试之前端框架等知识
  2. Spring Cloud Alibaba 一致性挑战:微服务架构下的数据一致性解决方案
  3. 新的一年,请以这样的标准完善自我
  4. 2018 亚太数学建模大赛B题解题思路
  5. 大洋洲群狼来了! 这是中国篮球学习契机?
  6. BZOJ3209(n的二进制表示中1的个数的乘积)
  7. TestNG中的参数化– DataProvider和TestNG XML(带有示例)
  8. c语言更改编译时字体,c习题编译时出现空的字符常量,怎么修改?
  9. 草稿 断开始datagrewvies 01
  10. 【java】java jps 命令
  11. 新机发布会用鸿蒙吗,鸿蒙操作系统及华为全场景新品发布会即将到来,硬件生态发展有望迎来加速度...
  12. 通过putty进行端口映射并且启动jupyter notebook
  13. 调参心得:超参数优化之旅
  14. C# 执行外部命令的代码
  15. mean shift
  16. 手机当启动U盘DriveDroid 版本 0.10.3 功能无限制版使用教程
  17. 【问题描述】3.2.6 中国余数定理:“有物不知几何,三三数余一,五五数余二,七七数余三,问:物有几何?”。编程求1~1000以内所有解。
  18. Vue 项目API接口封装
  19. 邻接矩阵(Adjacency Matrix)
  20. Microsemi Libero使用技巧1——查看芯片资源占用情况

热门文章

  1. jsonobject修改key的值_修改JSONArray里所有key的值
  2. android tv market,安卓市场TV版
  3. python json.load_python 读写json文件(dump, load),以及对json格式的数据处理(dumps, loads)...
  4. plsql只提交存储过程里的事务_plsql 存储过程 事务 | 学步园
  5. matlab安装配置vc出错,64位系统安装matlab出现mexopts.bat及出现缺少或无法安装c++ compilers 故障的解决办法.pdf...
  6. UE4学习-添加机关并添加代码控制
  7. linux更改甜器名称,Linux添加swap分区
  8. 服务器操作系统字符集,设置服务器字符集
  9. 模拟飞行 android,RFS模拟飞行pro安卓版
  10. mysql 格林时间转换_格林时间转换成正常时间