Django框架 之 模板语言

浏览目录

  • 标签
  • 过滤器

一、标签 Tags

1、普通变量

  • 普通变量用{{ }}
  • 变量名由数字、字母、下划线组成
  • 点.在模板语言中用来获取对象相应的属性值

示例:

1
2
3
4
5
6
7
8
{# 取variable中的第一个参数 #}
{{ variable.0 }}
{# 取字典dic中key的值 #}
{{ dic.key }}
{# 取obj_list对象列表中第一个对象的attr属性值 #}
{{ obj_list.0.attr }}
{# 点操作只能调用不带参数的方法 #}
{{ obj_list.0.method }}  

2、逻辑判断

逻辑判断用{% %}

for

  • 语法:{% for item in item_list %}...{% empty %}...{% endfor %}
  • 作用:循环item_list,如果item值为空或不存在,则会执行empty中的代码,切记要写endfor结束循环
  • 常用for循环参数:

Variable Description
forloop.counter 当前循环的索引值(从1开始)
forloop.counter0 当前循环的索引值(从0开始
forloop.revcounter 当前循环的倒序索引值(从1开始)
forloop.revcounter0 当前循环的倒序索引值(从0开始)
forloop.first 当前循环是不是第一次循环(布尔值)
forloop.last 当前循环是不是最后一次循环(布尔值)
forloop.parentloop 本层循环的外层循环

if

  • 语法:

    1
    {% if some_condition %}...{% elif other_condition %}...{% endif %}
  • 作用:条件判断,切记要写endif结束条件判断
  • 常用与if语句结合的判断关键字 
    1
    {% if some_condition %}...{% elif other_condition %}...{% endif %}

with

  • 语法
1
{% with new_variable = old_variable %}.....{% endwith %}
  • 作用:定义中间变量

csrf_token

  • 语法:在页面的每个form表单中写上

1
{% csrf_token %}
  • 作用:用于跨站请求伪造保护

注释

语法:

1
{# 注释内容 #}

3、母板系统

继承

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="x-ua-compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>Title</title>
  {% block page-css %}
   
  {% endblock %}
</head>
<body>
 
<h1>这是母板的标题</h1>
 
{% block page-main %}
 
{% endblock %}
<h1>母板底部内容</h1>
{% block page-js %}
 
{% endblock %}
</body>
</html>
  • 语法
1
{% extends 'base.html' %}
  • 作用:在子页面中在页面最上方使用上面的语法来继承母板

块block

  • 语法
1
{% block block_name %}...{% endblock %}
  • 作用:在子页面中通过定义母板中的block名来对应替换母板中相应的内容

示例:

1
2
3
4
5
{% block page-main %}
  <p>世情薄</p>
  <p>人情恶</p>
  <p>雨送黄昏花易落</p>
{% endblock %}

组件

  • 语法
1
{% include 'subassembly.html' %} 
  • 作用:可以将常用的固定的HTML内容保存在单独的文件中,在需要的地方用以上语法导入使用

4、静态文件相关

在Settings中设置static静态文件夹,在html中导入。

语法:

1
{% load static %}  

例如:

1
2
{% load static %}
<img src="{% static "images/hi.jpg" %}" alt="Hi!" />

引用JS文件时使用:

1
2
{% load static %}
<script src="{% static "mytest.js" %}"></script>

某个文件多处被用到可以存为一个变量  

1
2
3
{% load static %}
{% static "images/hi.jpg" as myphoto %}
<img src="{{ myphoto }}"></img>

使用get_static_prefix

1
2
{% load static %}
<img src="{% get_static_prefix %}images/hi.jpg" alt="Hi!" />  

或者

1
2
3
4
5
{% load static %}
{% get_static_prefix as STATIC_PREFIX %}
 
<img src="{{ STATIC_PREFIX }}images/hi.jpg" alt="Hi!" />
<img src="{{ STATIC_PREFIX }}images/hi2.jpg" alt="Hello!" />  

5、自定义simple_tag

  • 作用:可以自定义标签,注册后可使用
  • 自定义simple_tag的步骤(与自定义Filter类似,不过接收更灵活的参数)

    • 在项目的app中创建名为templatetags的文件夹
    • 在templatetags的文件夹中创建自定义的py文件,例如:custom_simpletag.py
    • custom_simpletag.py中编写自定义simple_tag,例如:

1
2
3
4
5
6
from django import template
register = template.Library()
 
@register.simple_tag(name="my_simpletag")
def add_simpletag(a,b,c): # 可接收多个参数
return "{} + {} + {}".format(a, b, c)
    • 使用自定义simple_tag前,首先在HTML页面中导入py文件
1
2
{% load custom_simpletag %}
{% my_simpletag "1" "2" "3" %} 

6、自定义inclusion_tag

  • 作用:返回html代码片段
  • 自定义inclusion_tag的步骤

    • 在项目的app中创建名为templatetags的文件夹
    • 在templatetags的文件夹中创建自定义的py文件,例如:custom_inclusiontag.py
    • custom_inclusiontag.py中编写自定义inclusiontag,例如:

1
2
3
4
5
6
7
8
from django import template
register = template.Library()
 
@register.inclusion_tag('inclusion_tag.html')
def my_inclusiontag(n):
= 1 if n < 1 else int(n)
data = ["第{}项".format(i) for in range(1, n+1)]
return {"data": data}
    • 在templates文件夹中创建刚才注册的inclusion_tag.html文件
1
2
3
4
5
<ul>
  {% for choice in data %}
  <li>{{ choice }}</li>
  {% endfor %}
</ul>
    • 使用自定义my_inclusiontag前,首先在HTML页面中导入py文件 
1
2
{% load custom_inclusiontag %}
{% my_inclusiontag 10 %}

二、过滤器 Filter

1、内置过滤器

语法:

1
{{ value|filter_name:args }}

注意:管道符前后没有空格  

default

  • 语法:
1
{{ value: default: "自定义内容"}}  
  • 作用:如果value值没传的话就显示自定义内容

length

  • 语法:
1
{{ value|length }} 
  • 作用:返回value的长度,如 value=['a', 'b', 'c', 'd']的话,就显示4.

filesizeformat

  • 语法:
1
{{ value|filesizeformat }}  
  • 作用:将value格式化为一个 “人类可读的” 文件大小格式

如果 value 是 123456789,输出将会是 117.7 MB。

slice

  • 语法:
1
{{value|slice:"start:end"}} 
  • 作用:切片

date

  • 语法:
1
{{ value|date:"Y-m-d H: i:s"}}  
  • 作用:将时间格式的value进行自定义格式化

safe

  • 语法:
1
{{value|safe}} 
  • 作用:取消Django对HTML标签和JS等语法标签进行自动转义,认为插入的HTML或JS是安全的不必转义

truncatechars

  • 语法:
1
{{ value|truncatechars:num}}  
  • 作用:如果字符串字符多于指定的字符数量,那么会被截断。截断的字符串将以可翻译的省略号序列(“…”)结尾。num参数是指截断的字符数

2、自定义过滤器

步骤

  • 在项目的app中创建名为templatetags的文件夹
  • 在templatetags的文件夹中创建自定义的py文件,例如:custom_filter.py
  • 在custom_filter.py中编写自定义过滤器,例如:

1
2
3
4
5
6
from django import template
register = template.Library()
 
@register.filter(name="my_filter")
def my_filter(value, arg): #最多接收两个参数
return value.replace(arg, "")
  • 使用自定义filter前,首先在HTML页面中导入py文件
1
2
{% load custom_filter %}
{{ variable|my_filter:"0" }}

Django框架 之 模板语言的更多相关文章

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

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

  2. [Python自学] day-18 (2) (MTV架构、Django框架、模板语言)

    一.实现一个简单的Web服务器 使用Python标准库提供的独立WSGI服务器来实现MVC架构. 首先,实现一个简单的Web服务器: from wsgiref.simple_server import ...

  3. 八 Django框架,模板语言

    模板语言就是可以将动态数据在html模板渲染的语言 一.接收值渲染 locals()函数,写在请求响应render()函数里,可以将逻辑处理函数里的变量传到html用模板语言渲染 {{...}}接收一 ...

  4. Django框架之模板语言特殊标记(将后端的数据显示到前端)

    后端代码 def GetMain(request): return render( request, "main.html", { "user1":" ...

  5. Django(框架、模板)

    day65 参考:https://www.cnblogs.com/liwenzhou/p/8296964.html Django框架的设计模式借鉴了MVC框架的思想,也是分成三部分,来降低各个部分之间 ...

  6. Django框架2——模板

    django框架2--模板 直接将HTML硬编码到你的视图里却并不是一个好主意: 对页面设计进行的任何改变都必须对 Python 代码进行相应的修改. 站点设计的修改往往比底层 Python 代码的修 ...

  7. Django框架04 /模板相关、别名/反向解析/路由分发

    Django框架04 /模板相关.别名/反向解析/路由分发 目录 Django框架04 /模板相关.别名/反向解析/路由分发 1. 语法 2. 变量/万能的点 3 . 过滤器 4. 标签Tags 5. ...

  8. Django框架之模板语法【转载】

    Django框架之模板语法 一.什么是模板? 只要是在html里面有模板语法就不是html文件了,这样的文件就叫做模板. 二.模板语法分类 一.模板语法之变量:语法为 {{ }}: 在 Django ...

  9. Django补充之模板语言

    路由系统 Django页面详情以及分页 举个例子: 有一组后台数据,需要展示到页面上,但由于数据量较大,那就需要做分页了吧,那么怎么才能将页面详情和分页都融合进去呢,Django里的路由系统加上正则表 ...

随机推荐

  1. android sdk国内服务器下载

    推荐使用国内东软的服务器下载android sdk相关: 如果是android sdk manager: HTTP Proxy Server : mirrors.neusoft.edu.cn HTTP ...

  2. HUST 1010 The Minimum Length

    There is a string A. The length of A is less than 1,000,000. I rewrite it again and again. Then I go ...

  3. 1110. Complete Binary Tree (25)

    Given a tree, you are supposed to tell if it is a complete binary tree. Input Specification: Each in ...

  4. poj2411 Mondriaan's Dream[简单状压dp]

    $11*11$格子板上铺$1*2$地砖方案.以前做过?权当复习算了,毕竟以前学都是浅尝辄止的..常规题,注意两个条件:上一行铺竖着的则这一行同一位一定要铺上竖的,这一行单独铺横的要求枚举集合中出现连续 ...

  5. $_validate 自动验证 字段是否重复

    1.在控制器里面实例化 数据表的时候用D方法,不要用M方法 2.在当前Admin下的Model里面建立一个自定义的Model AdminsController.class.php ========== ...

  6. bzoj 1798 [Ahoi2009]Seq 维护序列seq ——线段树

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1798 先乘后加,就可给加法标记乘上乘法标记. 注意可能有 *0 的操作,所以 pshd 时不 ...

  7. IIS配置文档

    IIS配置文档: 1.安装IIS.控制面板→程序→打开关闭Windows功能,Web管理服务和万维网服务都勾上. 2.部署网站:ASP.Net项目的发布:项目中点右键“发布”,选择“文件系统”,发布到 ...

  8. Windows Server 2008 修改系统的SID

    故事背景:用VMware搭建了几个操作系统相同的虚拟机.安装成功一台后,直接拷贝已经生成的VMDK文件来构建其它的虚拟机. 一般情况下,如果复制的各个虚拟机只是单独使用,并且这些虚拟机不加入到域(Ac ...

  9. Java基础--枚举Enum

    Java中的枚举是一种特殊的类,可以将一组固定常量的集合组成一种类型,使用方便且类型安全.使用enum关键字定义. enum类型父类为Enum,通过Enum.class可见Enum为抽象类,实现了Co ...

  10. AngularJS:参考手册

    ylbtech-AngularJS:参考手册 1.返回顶部 1. AngularJS 参考手册 AngularJS 指令 本教程用到的 AngularJS 指令 : 指令 描述 ng-app 定义应用 ...