Django模板语言

本文介绍了Django模板语言,包括变量、过滤器和标签的使用。变量用于展示后台数据,过滤器如`default`、`length`等提供数据处理功能,而标签如`for`、`if`则用于控制模板逻辑。模板继承是Django模板的一大特点,允许子模板复用和定制父模板的内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Django模板语言主要分为两部分:变量和标签,变量主要用来替换后台数据,标签主要来控制模板逻辑。

变量

变量在前端文档中表现为{{ variable }}的形式,变量名是字母数字下划线的组合,使用.来取后端传递过来的数据。并遵照字典查询、属性或方法查询、数字索引查询的查询顺序。

如果后端传递过来的是单个数据,前端直接使用{{}}替换。
如果传递是list, 则使用索引取值。
<ul>
    <li>{{ lst.0 }}</li>
    <li>{{ lst.1 }}</li>
    <li>{{ lst.2 }}</li>
    <li>{{ lst.3 }}</li>
</ul>

dict:
<div>{{ dic.name }} and {{ dic.age }}</div>

object:
<div>object cat  She has a name: {{ cat.name }}
    and now {{ cat.jumping }}
</div>
# 即便是对象方法,也是用 .method 取值, 而不是 .method()
过滤器

语法:{{ value|filter_name: 参数}}

常用过滤器

default
如果一个变量的值为false或者为空,使用给定的默认值。

{{变量|default:'给定的值'}}
#注意前后不要有空格,紧挨着写。

length
返回变量数据的长度。

{{变量|length}}

filesizeformat
讲变量数据大小格式化成‘可读’的文件尺寸。如:10kb

{{变量|filesizeformat}}

date
时间格式化

{{变量|data:"Y-m-d H:i:s"}}

safe
为了安全,django 模板会对HTML标签或js等语进行自动转义。如果我们想要在页面显示html标签或者js代码片段,需要告诉django这段代码是安全的,不必进行转义。即通过safe过滤器。

{变量|safe}

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

# ...也占三个字符位。
s = 'abcdefg'
{{ s|truncatechars:6}}
>>> abc...

更多内置过滤器请点击>>>
自定义过滤器请参考>>>

标签

for

<ul>
{% for user in userInfo %}
    <li>{{ user.name }}</li>
{% endfor %}
</ul>

for循环可以使用的一些参数:

这里写图片描述

for…empty

<ul>
{% for user in userInfo %}
    <li>{{ user.name }}</li>
{% empty %}
    <li>Null</li>
{% endfor %}
</ul>

if…elif…else

{% if user_list %}
  用户人数:{{ user_list|length }}
{% elif black_list %}
  黑名单数:{{ black_list|length }}
{% else %}
  没有用户
{% endif %}

if语句支持 and 、or、==、>、<、!=、<=、>=、in、not in、is、is not判断。

csrf-token

这个标签用于跨站请求伪造保护。
在页面的form表单里面写上{% csrf_token %}

模板继承

父模板

<!DOCTYPE html>
<html lang="en">
<head>
    <link rel="stylesheet" href="style.css" />
    <title>{% block title %}My amazing site{% endblock %}</title>
</head>

<body>
    <div id="sidebar">
        {% block sidebar %}
        <ul>
            <li><a href="/">Home</a></li>
            <li><a href="/blog/">Blog</a></li>
        </ul>
        {% endblock %}
    </div>

    <div id="content">
        {% block content %}{% endblock %}
    </div>
</body>
</html>

子模板

{% extends "base.html" %} # 一定要写在文件顶部

{% block title %}My amazing blog{% endblock %}

{% block content %}
{% for entry in blog_entries %}
    <h2>{{ entry.title }}</h2>
    <p>{{ entry.body }}</p>
{% endfor %}
{% endblock %}

简单而言就是:在父模板中定义{% block 名称 % } ...{% endblock %} 表示可以被替换的块,在子模板中使用{% block 名称 % } ...{% endblock %} 使用对应的名称进行替换。

待续……

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值