一.简介

模版是纯文本文件。它可以产生任何基于文本的的格式(HTML,XML,CSV等等)。

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

  1. {% extends "base_generic.html" %}
  2.  
  3. {% block title %}{{ section.title }}{% endblock %}
  4.  
  5. {% block content %}
  6. <h1>{{ section.title }}</h1>
  7.  
  8. {% for story in story_list %}
  9. <h2>
  10. <a href="{{ story.get_absolute_url }}">
  11. {{ story.headline|upper }}
  12. </a>
  13. </h2>
  14. <p>{{ story.tease|truncatewords:"100" }}</p>
  15. {% endfor %}
  16. {% endblock %}

1.变量

  1. {{ variable }}
  1. {#如果后台 渲染传过来的是字典格式的数据 那么前端页面解析值 dict={"k1":"v1"} 假设传的是{"dict": dict} 前端页面取值 .字典key值#}
  2.  
  3. <h1>{{dict.k1}}</h1>

2.过滤器

  可以通过使用 过滤器来改变变量的显示

格式:

  1. {{ name|lower }}

过滤器参数;

  1. {{ item.content |truncatewords:30 }} <!-- 只显示 content 变量的前30个词 -->

default

  1. {{ value|default:"nothing" }} <!--如果一个变量是false或者为空,使用给定的默认值。否则,使用变量的值-->

length

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

  1. {{ value|length }}

filesizeformat

  1. 将该数值格式化为一个 “人类可读的” 文件容量大小 (例如 '13 KB', '4.1 MB', '102 bytes', 等等)
  1. {{ value|filesizeformat }}

add

把add后的参数加给value

  1. {{ value|add:"2" }} <!--如果 value 4,则会输出 6.-->

capfirst

将变量首字母变大写

  1. {{ value|capfirst }} <!--如果valuetest过滤后转为Test-->

cut

移除value中所有的与给出的变量相同的字符串

  1. {{ value|cut:" " }}

dictsort

根据指定的key值对列表字典排序,并返回

  1. {{ value|dictsort:"name" }}
  1. {% for book in books|dictsort:"author.age" %}
  2. * {{ book.title }} ({{ book.author.name }})
  3. {% endfor %}

如给定值为:

  1. [
  2. {'title': '1984', 'author': {'name': 'George', 'age': 45}},
  3. {'title': 'Timequake', 'author': {'name': 'Kurt', 'age': 75}},
  4. {'title': 'Alice', 'author': {'name': 'Lewis', 'age': 33}},
  5. ]

那么结果为:

  1. * Alice (Lewis)
  2. * 1984 (George)
  3. * Timequake (Kurt)

random

随机返回一个值

  1. {{ value|random }}
  1. 如果 value 列表 ['a', 'b', 'c', 'd'], 可能输出的是 "b"

slice

切片

  1. {{ some_list|slice:":2" }}

如果 some_list 是 ['a', 'b', 'c'], 输出结果为 ['a', 'b']

truncatewords

字符串截断

  1. {{ value|truncatewords:2 }}

如果 value 是 "Joel is a slug",输出  "Joel is ...".

二.自动HTML转义

默认情况下,Django 中的每个模板会自动转义每个变量的输出。明确地说,下面五个字符被转义:

  • < 会转换为&lt;
  • > 会转换为&gt;
  • ' (单引号) 会转换为'
  • " (双引号)会转换为 &quot;
  • & 会转换为 &amp;

如何关闭

要控制模板上的自动转义,将模板(或者模板中的特定区域)包裹在autoescape标签 中

  1. {% autoescape off %}
  2. Hello {{ name }}
  3. {% endautoescape %}

autoescape标签接受on 或者 off作为它的参数。有时你可能想在自动转义关闭的情况下强制使用它。下面是一个模板的示例:

  1. Auto-escaping is on by default. Hello {{ name }}
  2.  
  3. {% autoescape off %}
  4. This will not be auto-escaped: {{ data }}.
  5.  
  6. Nor this: {{ other_data }}
  7. {% autoescape on %}
  8. Auto-escaping applies again: {{ name }}
  9. {% endautoescape %}
  10. {% endautoescape %}

自动转义标签作用于扩展了当前模板的模板,以及通过 include 标签包含的模板,就像所有block标签那样。例如:

  1. {% autoescape off %}
  2. <h1>{% block title %}{% endblock %}</h1>
  3. {% block content %}
  4. {% endblock %}
  5. {% endautoescape %}
  1. {% extends "base.html" %}
  2. {% block title %}This &amp; that{% endblock %}
  3. {% block content %}{{ greeting }}{% endblock %}

三.自定义simple_tag

自定义simple_tag

  1. {% load humanize %}
  2.  
  3. {{ 45000|intcomma }}

load标签可以接受多个库名称,由空格分隔。例如

  1. {% load humanize i18n %}

5.1 自定义标签代码

自定义模板标签和过滤器必须位于Django 的某个应用中。如果它们与某个已存在的应用相关,那么将其与应用绑在一起才有意义;否则,就应该创建一个新的应用来包含它。

这个应用应该包含一个templatetags 目录,和models.pyviews.py等文件处于同一级别目录下,如果目录不存在则创建它——不要忘记创建__init__.py 文件以使得该目录可以作为Python 的包。在添加这个模块以后,在模板里使用标签或过滤器之前你将需要重启服务器。新建 PY文件

切记:目录名一定要是templatetags

自定义simple_tag
在templatetags目录下的py文件中写:

  1. #!/usr/bin/env python
  2. # -*- coding:utf-8 -*-
  3. from django import template
  4. from django.utils.safestring import mark_safe
  5.  
  6. register = template.Library()
  7.  
  8. @register.simple_tag
  9. def my_simple_time(v1,v2,v3):
  10. return v1 + v2 + v3

在HTML中写:

  1. {% load xx %}
  2. <!DOCTYPE html>
  3. <html lang="en">
  4. <head>
  5. <meta charset="UTF-8">
  6. <title>Title</title>
  7. </head>
  8. <body>
  9.  
  10. {% my_simple_time 1 2 3%}
  11.  
  12. </body>
  13. </html>

自定义simple_tag的html中不能用于if条件作为判断,so引出了自定义过滤器函数

自定义过滤器函数

(最多俩个参数,html中可以有if条件语句)
自定义的过滤器就是一个带1,2个参数的python函数,一个参数放变量值,一个用来放选项值,比如{{ var|remove:"bar" }}, var是变量值,"bar"是选项值。
在templatetags目录下的py文件中写:
  1. #!/usr/bin/env python
  2. # -*- coding:utf-8 -*-
  3. from django import template
  4. from django.utils.safestring import mark_safe
  5. register = template.Library()
  6.  
  7. @register.filter
  8. def detail3(value,arg):
  9. allcount, remainder = arg.split(',')
  10. allcount = int(allcount)
  11. remainder = int(remainder)
  12. if value%allcount == remainder:
  13. return True
  14. return False

在HTML中写:

  1. {% load xx %}
  2. <!DOCTYPE html>
  3. <html lang="en">
  4. <head>
  5. <meta charset="UTF-8">
  6. <title>Title</title>
  7. </head>
  8. <body>
  9.  
  10. {{ 23|detail4:"4,0" }}
  11.  
  12. {% if 23|detail4:"4,0" %}
  13. <h1>123</h1>
  14. {% endif %}
  15.  
  16. </body>
  17. </html>

Django 模版语法的更多相关文章

  1. django 模版 语法与使用

    目录 django 模版语法与使用 django模板语言介绍 (摘自官方文档) 链接 什么是模板? 模板语句的 注释 变量 {{ 变量 }} 点(.)在模板语言中有特殊的含义,用来获取对象的相应属性值 ...

  2. Django 模版语法与使用

    目录 Django 模版语法与使用 django模板语言介绍 (摘自官方文档) 链接 什么是模板? 模板语句的 注释 变量 {{ 变量 }} 点(.)在模板语言中有特殊的含义,用来获取对象的相应属性值 ...

  3. Django 模版语法 测试环境 ORM单表查询

    模版语法 传值 视图函数向前端html页面传值,基本上所有的数据类型都可以渲染在前端页面上. views.py from django.shortcuts import render, redirec ...

  4. django 模版语法及使用

    模版的定义 模版是一个文本,用语分离文档的表现形式和内容,通常用于生成html 模版当中能够使用的python语法非常少,for ,if 之类,还有ifequal,结束的时候也要写endifequal ...

  5. Django 模版语法 三

    使用自定义simple_tag 在 app01 下面创建 templatetags 文件夹,在创建 my_tag.py 文件,内容如下: from django import template fro ...

  6. Django 模版语法 二

    变量的过滤器(filter)的使用 过滤器:upper, lower, first, capfirst 在 views.py 中修改 from django.shortcuts import rend ...

  7. Django 模版语法 一

    创建项目 django_template 和 app django-admin startproject django_template python manage.py startapp app01 ...

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

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

  9. Django模版语言的复用 1. include标签--模版导入 2.inclusion_tag自定义标签--模版导入 3.母版

    include标签--模版导入 ''' 前提:项目中,往往会出现多个页面拥有一个或几个相同的页面版块,或是一个页面多个页面版块是相同的 如何运用:可以将多个样式标签的集合进行封装,对外提供版块的名字( ...

随机推荐

  1. AndroidStudio 集成litepal 报错

    E/AndroidRuntime(24972): org.litepal.c.b: can not find a class named org.litepal.model.Table_Schema ...

  2. 【BZOJ3172】单词(AC自动机)

    [BZOJ3172]单词(AC自动机) 题面 Description 某人读论文,一篇论文是由许多单词组成.但他发现一个单词会在论文中出现很多次,现在想知道每个单词分别在论文中出现多少次. Input ...

  3. js对象的合并

    问题情况:将2个或2个以上对象(object{....})中的属性进行合并,即最后合并为一个object{.....}传递给后端. 问题场景:多页表单数据的一同提交 解决办法:Object.assig ...

  4. ajax错误处理 500错误

    在使用ajax请求的时候 ,如果服务器返回的是500错误,或者其他非正常的http错误状态码时 会提示下面的错误  而我们需要把错误信息处理出来 $.ajax({ type:'get', url:&q ...

  5. 自动化之路 Graphite监控上手指南

    自动化运维怎能少了监控,推荐Graphite监控,下面是配置地址 http://www.infoq.com/cn/articles/graphite-intro/ Graphite官网 http:// ...

  6. comfirm 方法显示对话框

    comfirm 方法显示对话框 原理: confirm() 方法用于显示一个带有指定消息和 OK 及取消按钮的对话框 confirm(message): message:要在 window 上弹出的对 ...

  7. SignalR Self Host+MVC等多端消息推送服务(4)

    由于工作太忙,一直没时间更新博客,之前有很多朋友一直问我什么时候将后续的代码发上来,一直没时间,今天就长话短说,不写文章了,直接上demo,里面将正式项目中用到的一些敏感信息修改了,要使用的话下载后自 ...

  8. 《Linux命令行与shell脚本编程大全》- 读书笔记2 - 更多的bash shell命令

    更多的bash shell命令 想检测进程,需要熟悉ps命令的用法.ps命令好比工具中的瑞士军刀,它能输出运行在系统上的所有程序的许多信息.默认情况下,ps命令只会显示运行在当前控制台下的属于当前用户 ...

  9. Java内存区域之程序计数器--《深入理解Java虚拟机》学习笔记及个人理解(一)

    Java虚拟机程序计数器 在书上的P39页 程序计数器干嘛的? 有了它,字节码解释器才可以知道下一条要执行的字节码指令是哪个. 无论是取下一条指令还是分支.循环.跳转.中断.线程恢复,都需要这个程序计 ...

  10. 微信小程序学习笔记(阶段一)

    一阶段学习过程: (一)看官方文档的简易教程:https://mp.weixin.qq.com/debug/wxadoc/dev/ (二)看小码哥视频:https://chuanke.baidu.co ...