Django 模板语法

Django 模板语法

一、模板

只要是在html里面有模板语法就不是html文件了,这样的文件就叫做模板。

二、模板语法

模板语法变量:{{ }}
在Django模板中遍历复杂数据结构的关键是句点字符 .(其实就是点号)
views.py

  1. from django.shortcuts import render
  2. def index(request):
  3. name = "Hello world!"
  4. number = 101
  5. lst = [1, 2, 3, 4, 5]
  6. dic = {"name": "eric", "job": "teacher"}
  7. class People:
  8. def __init__(self, name, age):
  9. self.name = name
  10. self.age = age
  11. def __str__(self):
  12. return self.name + str(self.age)
  13. def dream(self):
  14. return "你有梦想吗?"
  15. # 实例化
  16. person_jack = People("jack", 10)
  17. person_pony = People("pony", 36)
  18. person_cent = People("cent", 55)
  19. person_list = [person_jack, person_pony, person_cent]
  20. return render(request, "index.html",
  21. {
  22. "name": name,
  23. "num": number,
  24. "lst": lst,
  25. "dic": dic, # 键对应的是模板里的名字,值对应的是上面定义的值
  26. "person_jack": person_jack,
  27. "person_pony": person_pony,
  28. "person_list": person_list
  29. }
  30. )

templates/index.html

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Django 模板</title>
  6. </head>
  7. <body>
  8. <h3>变量{{ variable }}:深度查询</h3>
  9. <h5>{{ name }}</h5>
  10. <p>{{ num }}</p>
  11. <p>{{ lst }}</p>
  12. <p>{{ dic }}</p>
  13. <p>{{ lst.0 }}</p>
  14. <p>{{ lst.4 }}</p>
  15. <p>{{ dic.name }}</p>
  16. <p>{{ dic.job}}</p>
  17. <p>{{ person_jack.name }}</p>
  18. <p>{{ person_jack.age }}</p>
  19. <p>{{ person_list.2.name }}</p>
  20. </body>
  21. </html>

运行输出结果如下图所示:

注意:在使用templates时,需要在django项目的settings配置文件中对templates的路径做如下配:

  1. TEMPLATES = [
  2. {
  3. 'BACKEND': 'django.template.backends.django.DjangoTemplates',
  4. # os.path.join(BASE_DIR, "templates"),启用django模板;
  5. # 如果没有这句会出现"django.template.exceptions.TemplateDoesNotExist: index.html"错误
  6. 'DIRS': [os.path.join(BASE_DIR, "templates")],
  7. 'APP_DIRS': True,
  8. 'OPTIONS': {
  9. 'context_processors': [
  10. 'django.template.context_processors.debug',
  11. 'django.template.context_processors.request',
  12. 'django.contrib.auth.context_processors.auth',
  13. 'django.contrib.messages.context_processors.messages',
  14. ],
  15. },
  16. },
  17. ]

其中,局点符也可以用来引用对象的方法(无参数方法)

  1. <h4>字典:{{ dic.name.upper }}</h4>

模板语法标签:{% tag %}
标签语法是:{% tag %},它比变量更加复杂:一些在输出中创建文本,一些通过循环或者逻辑来控制流程,一些加载其后的变量将使用道德额外信息到模板中。一些标签需要开始和结束标签(例如:{% tag %}... 标签内容...{% endtag %})。
1.for标签(循环序号可以通过{{ forloop }}显示)

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Django 模板</title>
  6. </head>
  7. <body>
  8. <h3>循环取值</h3><hr>
  9. {% for item in person_list %}
  10. <p>{{ item.name }}, {{ item.age }}</p>
  11. {% endfor %}
  12. <h3>循环取值:倒序</h3>
  13. {% for item in person_list reversed %}
  14. {# 序号从1开始 #}
  15. <p>{{ forloop.counter }}---------->{{ item.name }}, {{ item.age }}</p>
  16. {# 序号从0开始 #}
  17. <p>{{ forloop.counter0 }}---------->{{ item.name }}, {{ item.age }}</p>
  18. {# 序号倒序 #}
  19. <p>{{ forloop.revcounter }}---------->{{ item.name }}, {{ item.age }}</p>
  20. {% endfor %}
  21. <h3>循环取值:字典</h3>
  22. {% for key, value in dic.items %}
  23. <p>{{ key }}, {{ value }}</p>
  24. {% endfor %}
  25. </body>
  26. </html>

运行结果如下图所示:

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

  1. {% for person in person_list %}
  2. <p>{{ person.name }}</p>
  3. {% empty %}
  4. <p>sorryno this person</p>
  5. {% endfor %}

3.if标签:{% if %}会对一个变量求值,如果它的值是"True"(存在、不为空且不是boolean类型的false值),对应的内容块被执行

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Django 模板</title>
  6. </head>
  7. <body>
  8. {% if num > 200 %}
  9. <p>大于</p>
  10. {% elif num == 200 %}
  11. <p>等于</p>
  12. {% else %}
  13. <p>小于</p>
  14. {% endif %}
  15. </body>
  16. </html>

4.with:使用一个简单的名字还出一个复杂的变量,当我们需要一个"昂贵的"方法(比如:访问数据库)很多次的时候是非常有用的

  1. {% with total=business.emlpoyees.count %}
  2. {{ total }} empolyee {{ total | pluralize }}
  3. % endwith %}
  1. <p>{{ person_list.2.name }}</p>
  2. {% with name=person_list.2.name %}
  3. <p>{{ name }}</p>
  4. {% endwith %}

5.csrf_token:跨站点请求伪造保护
提交数据的时候会做安全机制,当用户点击提交的时候会出现一个forbidden错误,就是用settings配置里面的csrf做的安全机制,如果我们不需要使用,可以将其注释。或者在form表单下面添加{% csrf_token %}来解决该问题(这才是真正的解决办法,注释不是解决办法)。

  1. <h3>scrf_token</h3>
  2. <form action="/tag/" method="post">
  3. {% csrf_token %}
  4. <p><input type="text" name="haiyan"></p>
  5. <input type="submit">
  6. </form>

模板语法过滤器:{{ obj|filter__name:param }},过滤器使用管道字符

1.default:{{ variable| default: "nothing"}},如果变量是false或者为空,使用默认值。否则,使用变量的值

  1. <p>default过滤器:{{ li|default:"如果显示为空,设置解释性的内容。" }}</p>

2.length:返回值的长度,它对字符串和列表都起作用

  1. {{ value | length }} # 如果value是["a", "b", "c", "d"],那么输出是4

3.filesizeformat:将值格式化为"人类可读"的文件尺寸(例如:13KB,4.1M,102bytes等等)

  1. {{ value | filesizeformat }} # 如果value是123456789,输出将会是117.7MB

4.date:格式化日期时间格式

  1. {{ value | date:"Y-m-d" }} # 如果value=datetime.datetime.now(),返回时间的年-月-日格式

5.slice:切片

  1. {{ value | slice:"2:-1" }} # 如果value="hello world",返回'llo worl'

6.truncatechars:截断
如果字符串字符多于指定的字符数量,那么会被截断。截断的字符串将以可翻译的省略号序列(...)结尾,参数:要截断的字符数。

  1. <p>截断字符: {{ content | truncatechars:20 }}</p>
  2. <p>截断单词: {{ content | truncatewords:4 }}</p>

如果content是"i am is jack, where are you come from?"
输出结果:截断字符: i am is jack, whe...;截断单词i am is jack, where...

7.safe
django的模板中会对HTML标签和JS语法标签进行自动转义,这样是为了安全。但是有的时候我们不想这些HTML元素被转义,比如我们做一个内容管理系统,后台添加的文章是经过修饰的,这些修饰可能是通过类似于FCKeditor编辑加注了HTML修饰符的文本,如果自动转义的话显示的就是保护HTML标签的源文件。为了在django中关闭HTML自动转义有两种方式,如果是一个单独的变量我们可以通过过滤器"|safe"的方式告诉django这段代码是安全的不必转义,如下:

  1. value="<a href="">点击</a>""
  2. {{ value | safe }}
  1. <p>{{ label }}</p> # 为了安全,系统会把标签变成字符串
  2. <p>{{ label | safe }}</p> # 加上safe,确定数据时安全的才能被当成是标签

django模板语法的更多相关文章

  1. Django 2.0 学习(12):Django 模板语法

    Django 模板语法 一.模板 只要是在html里面有模板语法就不是html文件了,这样的文件就叫做模板. 二.模板语法 模板语法变量:{{ }} 在Django模板中遍历复杂数据结构的关键是句点字 ...

  2. Python学习---django模板语法180122

    django模板语法[Template] 模版的组成:  HTML代码+逻辑控制代码  <h1> {{ user_name }} </h1> 逻辑控制代码的组成: 1.变量: ...

  3. 【转】Django 模板语法

    转自:https://www.cnblogs.com/love9527/p/9077863.html Django 模板语法 一.模板 只要是在html里面有模板语法就不是html文件了,这样的文件就 ...

  4. django模板语法之include

    假如我们有以下模板index.html,代码为: <!DOCTYPE html> <html lang="en"> <head> <met ...

  5. Django 模板语法

    模板语法之变量 变量在HTML中的表示:{{var_name}} 变量取值:句点符 "." views: def index(request): import datetime s ...

  6. Django 模板 语法 变量 过滤器 模板继承 组件 自定义标签和过滤器 静态文件相关

    本节目录 一 语法 二 变量 三 过滤器 四 标签Tags 五 模板继承 六 组件 七 自定义标签和过滤器 八 静态文件相关 一 语法   模板渲染的官方文档 关于模板渲染你只需要记两种特殊符号(语法 ...

  7. django 模板语法和三种返回方式

    模板 for循环 {% for athlete in athlete_list %} <li>{{ athlete.name }}</li> {% endfor %} if语句 ...

  8. Django模板-模板标签

    接着Django模板-基础知识继续写模板相关知识. if标签 {% if %} 标签接受 and , or 或者 not 关键字来对多个变量做判断 ,或者对变量取反( not ). 但是不允许在同一个 ...

  9. Django——模板层(template)(模板语法、自定义模板过滤器及标签、模板继承)

    前言:当我们想在页面上给客户端返回一个当前时间,一些初学者可能会很自然的想到用占位符,字符串拼接来达到我们想要的效果,但是这样做会有一个问题,HTML被直接硬编码在 Python代码之中. 1 2 3 ...

随机推荐

  1. A1014. Waiting in Line

    Suppose a bank has N windows open for service. There is a yellow line in front of the windows which ...

  2. Http请求报头设置

    1.添加一个SetHeaderValue方法: public static void SetHeaderValue(WebHeaderCollection header, string name, s ...

  3. Vue+koa2开发一款全栈小程序(1.课程介绍+2.ES6入门)

    1.课程介绍 1.课程概述 1.做什么? Vue+koa2开发一款全栈小程序 2.哪些功能? 个人中心.图书列表.图书详情.图书评论.个人评论列表 3.技术栈 小程序.Vue.js.koa2.koa- ...

  4. Linux:去除每一行行首的空格

    如下命令: sed 's/^ *//' file1.txt > file2.txt

  5. Linux上svn搭建

    安装svn yum -y install subversion 2.创建版本库 svnadmin  create /home/svn/test 3.配置用户 vim /home/svn/test/co ...

  6. div设置overflow-scroll滚动之后,jq获取其子元素的offset.top出现问题。

    先上个图: 布局很简单,左右超过屏幕的部分自行滚动. 1. html <div class="ce-container"> <div class="ce ...

  7. Visual Studio 2015中设计UML类图

    1.UML简介 Unified Modeling Language (UML)又称统一建模语言或标准建模语言. 简单说就是以图形方式表现模型,根据不同模型进行分类,在UML 2.0中有13种图,以下是 ...

  8. yum工具的使用

    yum工具的使用 ---------- yum list|head -n 10会有一个报错:由于管道被破坏而退出-----------搜索名字为vim的rpm包yum search vim使用grep ...

  9. ResourceBundle读取properties配置文件

    package cn.rocker.readProperties; import java.util.ResourceBundle; import org.junit.Test; /** * @Cla ...

  10. MySQL权限授权认证详解

    MySQL权限授权认证详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.MySQL权限系统介绍1>.权限系统的作用是授予来自某个主机的某个用户可以查询.插入.修改.删除 ...