栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

【Django—模板层】

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【Django—模板层】

模板语法传值

两种方式:

  1. {{}}:变量相关

  2. {%%}:逻辑相关
    模板语法传值支持python的所有基本数据类型


    内部能够自动判断当前的变量名是否可以 加括号调用,如果可以就会自动执行,针对函数名和类名

模板语法之注释

{# 注释内容 #}

模板语法之过滤器

过滤器类似于内置函数,但是这种内置函数最多只能额外传输一个参数。

语法结构:

{{ 数据对象|过滤器名称:参数 }}

常见的Django过滤器

#1、default
#作用:如果一个变量值是False或者为空,使用default后指定的默认值,否则,使用变量本身的值,如果value=’‘则输出“nothing”
{{ value|default:"nothing" }}

#2、length
#作用:返回值的长度。它对字符串、列表、字典等容器类型都起作用,如果value是 ['a', 'b', 'c', 'd'],那么输出是4
{{ value|length }}

#3、filesizeformat
#作用:将值的格式化为一个"人类可读的"文件尺寸(如13KB、4.1 MB、102bytes等等),如果 value 是 12312312321,输出将会是 11.5 GB
{{ value|filesizeformat }}

#4、date
#作用:将日期按照指定的格式输出,如果value=datetime.datetime.now(),按照格式Y-m-d则输出2019-02-02
{{ value|date:"Y-m-d" }}  

#5、slice
#作用:对输出的字符串进行切片操作,顾头不顾尾,如果value=“egon“,则输出"eg"
{{ value|slice:"0:2" }} 

#6、truncatechars
#作用:如果字符串字符多于指定的字符数量,那么会被截断。截断的字符串将以可翻译的省略号序列(“...”)结尾,如果value=”hello world egon 嘎嘎“,则输出"hello...",注意8个字符也包含末尾的3个点
{{ value|truncatechars:8 }}

#7、truncatewords
#作用:同truncatechars,但truncatewords是按照单词截断,注意末尾的3个点不算作单词,如果value=”hello world egon 嘎嘎“,则输出"hello world ..."
{{ value|truncatewords:2 }}

#8、safe
#作用:出于安全考虑,Django的模板会对HTML标签、JS等语法标签进行自动转义,例如value="",模板变量{{ value }}会被渲染成<script>alert(123)</script>
交给浏览器后会被解析成普通字符”“,失去了js代码的语法意义,
但如果我们就想让模板变量{{ value }}被渲染的结果又语法意义,那么就用到了过滤器safe,比如value='点我啊',
在被safe过滤器处理后就成为了真正的超链接,不加safe过滤器则会当做普通字符显示’点我啊‘
{{ value|safe }}

针对safe过滤器,我们也可以在后端实现:使用mark_safe方法后将结果传给页面,页面就能识别标签语法了。

from django.utils.safestring import mark_safe
tag = '内容'
res = mark_safe(ttt)
模板语法之标签

语法结构:

{{ 标签名称… }}
内容
{{ end标签名称 }}

if判断

{% if 条件1 %}
内容
{% elif 条件2 %}
内容
{% else %}
内容
{% endif %}

for循环

{% for 变量 in 容器类型 %}
内容
{% empty %} # 可不写
for循环对象为空时执行
{% endfor %}

自定义过滤器,标签和inclusion_tag 一. 自定义过滤器

当内置的过滤器或标签无法满足我们需求时,我们可以自定义,具体操作步骤如下

  1. 在settings中的INSTALLED_APPS添加当前app的名字,不然django无法找到自定义的过滤器或标签

  2. 在文件夹app01中创建子文件夹templatetags(文件夹名只能是templatetags)

  3. 在templatetags新建任意.py文件,

  4. 新建的py文件内需要先提前编写两行固定的代码

from django import template
register = template.Library()

  1. 使用时需要先使用模板语法导入py文件名

{% load py文件名 %}

  1. 自定义过滤器或标签必须重新启动django方可生效

自定义的过滤器只能定义最多两个参数

#1、自定义过滤器

@register.filter
def my_multi_filter(v1 ,v2): # 自定义的过滤器只能定义最多两个参数,针对{{ value1 | filter_multi:value2 }},参数传递为v1=value1,v2=value2
    return  v1 * v2

使用:必须先加载存有自定义过滤器和标签的文件

#  
{% load my_tags %}

{{ salary|my_multi_filter:12 }}

自定义的标签可以定义多个参数

#2、自定义标签
@register.simple_tag
def my_multi_tag(v1, v2): # 自定义的标签可以定义多个参数
    return v1 * v2

使用:

{% my_multi_tag 1 2 %}

inclusion_tag
inclusion_tag可以把写好的一些标签放入到网页中。

该方法需要先作用于一个局部html页面,之后将渲染的结果放到调用的位置。

@register.inclusion_tag('content.html')
def func(n):
    l1 = [i for i in range(n)]
    return l1

content.html

    {% for i in l %}
  • {{ i }}
  • {% endfor %}

页面调用:

{% func 10 %}

模板的导入

在实际开发中,模板文件彼此之间可能会有大量冗余代码,为此django提供了专门的语法来解决这个问题,主要围绕三种标签的使用:include标签、extends标签、block标签
比如我想要让home.html与index.html一样,那么我只需要将index.html导入到home.html中即可。

home.html

{% include ‘index.html’ %}

模板的继承

类似于面向对象中的继承:继承了某个页面就可以使用该页面上所有的资源
有很多差不多的页面 知识局部发生了变化 模板的继承可以很好的实现该需求
1.先在模板中通过block划定将来可以被修改的区域

{% block content %}


{% endblock %}

2.子模板继承模板

{% entends ‘index.html’ %}

3.修改划定的区域

{% block centent %}


{%endblock%}

4.子页面还可以重复使用父页面的内容

{{block.super}}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/892905.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号