Django框架 之 模板语言

Stella981
• 阅读 623

浏览目录

  • 标签
  • 过滤器

一、标签 Tags

1、普通变量

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

示例:

{# 取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

  • 语法:

    {% if some_condition %}...{% elif other_condition %}...{% endif %}
    
  • 作用:条件判断,切记要写endif结束条件判断

  • 常用与if语句结合的判断关键字 

    {% if some_condition %}...{% elif other_condition %}...{% endif %}
    

with

  • 语法

    {% with new_variable = old_variable %}.....{% endwith %}

  • 作用:定义中间变量

csrf_token

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

    {% csrf_token %}

  • 作用:用于跨站请求伪造保护

注释

语法:

{# 注释内容 #}

3、母板系统

继承

<!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>
  • 语法

    {% extends 'base.html' %}

  • 作用:在子页面中在页面最上方使用上面的语法来继承母板

块block

  • 语法

    {% block block_name %}...{% endblock %}

  • 作用:在子页面中通过定义母板中的block名来对应替换母板中相应的内容

示例:

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

组件

  • 语法

    {% include 'subassembly.html' %} 

  • 作用:可以将常用的固定的HTML内容保存在单独的文件中,在需要的地方用以上语法导入使用

4、静态文件相关

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

语法:

{% load static %}  

例如:

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

引用JS文件时使用:

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

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

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

使用get_static_prefix

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

或者

{% 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,例如:

    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文件

     

    {% 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,例如:

    from django import template register = template.Library()

    @register.inclusion_tag('inclusion_tag.html') def my_inclusiontag(n): n = 1 if n < 1 else int(n) data = ["第{}项".format(i) for i in range(1, n+1)] return {"data": data}

    • 在templates文件夹中创建刚才注册的inclusion_tag.html文件
      {% for choice in data %}
    • {{ choice }}
    • {% endfor %}
    • 使用自定义my_inclusiontag前,首先在HTML页面中导入py文件

     

    {% load custom_inclusiontag %} {% my_inclusiontag 10 %}

二、过滤器 Filter

1、内置过滤器

语法:

{{ value|filter_name:args }}

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

default

  • 语法:

    {{ value: default: "自定义内容"}}  

  • 作用:如果value值没传的话就显示自定义内容

length

  • 语法:

    {{ value|length }} 

  • 作用:返回value的长度,如 value=['a', 'b', 'c', 'd']的话,就显示4.

filesizeformat

  • 语法:

    {{ value|filesizeformat }}  

  • 作用:将value格式化为一个 “人类可读的” 文件大小格式

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

slice

  • 语法:

    {{value|slice:"start:end"}} 

  • 作用:切片

date

  • 语法:

    {{ value|date:"Y-m-d H: i:s"}}  

  • 作用:将时间格式的value进行自定义格式化

safe

  • 语法:

    {{value|safe}} 

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

truncatechars

  • 语法:

    {{ value|truncatechars:num}}  

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

2、自定义过滤器

步骤

  • 在项目的app中创建名为templatetags的文件夹

  • 在templatetags的文件夹中创建自定义的py文件,例如:custom_filter.py

  • 在custom_filter.py中编写自定义过滤器,例如:

    from django import template register = template.Library()

    @register.filter(name="my_filter") def my_filter(value, arg): #最多接收两个参数 return value.replace(arg, "")

  • 使用自定义filter前,首先在HTML页面中导入py文件 

    {% load custom_filter %} {{ variable|my_filter:"0" }}

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
3个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Peter20 Peter20
3年前
mysql中like用法
like的通配符有两种%(百分号):代表零个、一个或者多个字符。\(下划线):代表一个数字或者字符。1\.name以"李"开头wherenamelike'李%'2\.name中包含"云",“云”可以在任何位置wherenamelike'%云%'3\.第二个和第三个字符是0的值wheresalarylike'\00%'4\
Stella981 Stella981
3年前
KVM调整cpu和内存
一.修改kvm虚拟机的配置1、virsheditcentos7找到“memory”和“vcpu”标签,将<namecentos7</name<uuid2220a6d1a36a4fbb8523e078b3dfe795</uuid
Wesley13 Wesley13
3年前
ThinkPHP 模板变量输出
普通输出输出模板中的变量,格式如下:{$变量名称}例子:{$username}//普通变量{$userinfo"email"}//数组方式{$userinfo"sub""name"}//三维数组方式{$userinfo:email}//对象方式{$
Stella981 Stella981
3年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Stella981 Stella981
3年前
Django 学习 之 模板(html)与配置静态文件
一.模板(html)1.模板语法之变量:语法为{{}}在Django模板中遍历复杂数据结构的关键是句点字符,语法:{{var\_name}}var\_name是一个变量名称,需要和views文件retu
Python进阶者 Python进阶者
9个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这