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. New Concept English three (56)

    The river which forms the eastern boundary of our farm has always played an important part in our li ...

  2. Django REST_framework Quickstart

    局部避免crsf的方式 针对视图函数: from django.views.decorators.csrf import csrf_exempt @csrf_exempt def foo(reques ...

  3. 要做Java程序员 需要知道那些技术 重点有那些

    一.Java程序员         高级特性               反射.泛型.注释符.自动装箱和拆箱.枚举类.可变               参数.可变返回类型.增强循环.静态导入     ...

  4. 机器学习(六)— logistic回归

    最近一直在看机器学习相关的算法,今天学习logistic回归,在对算法进行了简单分析编程实现之后,通过实例进行验证. 一 logistic概述 个人理解的回归就是发现变量之间的关系,也就是求回归系数, ...

  5. HDU4585 Shaolin (STL和treap)

    Shaolin HDU - 4585       Shaolin temple is very famous for its Kongfu monks.A lot of young men go to ...

  6. docker容器与宿主机之间内容拷贝

    来自:http://blog.csdn.net/yangzhenping/article/details/43667785 常用的方式有3种: 从容器内拷贝文件到主机上 docker cp <c ...

  7. Milking Time(DP)

    个人心得:一开始自己找状态,是这么理解的,只要前面一个满足就等于此时的值加上d(n-1),否则就是不挖此时的比较d(n-1)和 d(n-2)+cost,不过仔细一想忽略了很多问题,你无法确定n-2和此 ...

  8. htc使用方式(转)

    一.htc的两种使用方式: 关联行为(Attach Behavior): IE 5.0以上支持, htc 技术出现的初衷. 主要目的是把对象复杂的样式变化包装起来,替代 javascript + cs ...

  9. QT 中“ std::cerr ”的使用方法【转载】

    std::cerr  标准错误输出流 std::cout 标准输出流 std::cerr 与 std::cout的最大不同是 cerr 是 不带输出缓冲 的,直接就可以输出到显示器上, 而 cout ...

  10. mina在spring中的配置多个端口

    本次练习中是监听2个端口 applicationContext-mina.xml: <?xml version="1.0" encoding="UTF-8" ...