Django 的模板语言提供了一个简单而强大的工具,用来编写 HTML 模板并支持动态内容。这里是 Django 模板中常用语法的全面概述,包括变量、控制结构(如 for
和 if
语句)、过滤器等。
1. 变量
在模板中使用双花括号 {{ }}
来输出变量的值:
<p>Hello, {{ username }}!</p>
如果变量是对象的属性或字典的键,可以通过点语法访问:
<p>{{ user.first_name }}</p>
<p>{{ product["name"] }}</p>
2. 过滤器
过滤器是用于修改变量显示的内容的函数,可以通过管道符 |
使用多个过滤器:
<p>{{ name|lower }}</p> {# 将变量转换为小写 #}
<p>{{ bio|truncatewords:30 }}</p> {# 将字符串截断到 30 个单词 #}
常用过滤器包括:
date
:格式化日期,如{{ date|date:"Y-m-d" }}
length
:获取列表长度,如{{ items|length }}
default
:指定默认值,如{{ name|default:"Unknown" }}
join
:将列表内容合并为字符串,如{{ list|join:", " }}
3. 控制结构
Django 模板支持 if
、for
等控制结构,用于控制模板的渲染逻辑。
if
语句
if
语句用于条件判断,支持 and
、or
等逻辑操作符。
{% if user.is_authenticated %}
<p>Welcome, {{ user.username }}!</p>
{% else %}
<p>Please log in.</p>
{% endif %}
支持嵌套 if
:
{% if item %}
{% if item.price > 100 %}
<p>This item is expensive.</p>
{% else %}
<p>This item is affordable.</p>
{% endif %}
{% endif %}
支持的条件判断
==
:等于!=
:不等于<
、>
、<=
、>=
:比较大小in
:检查值是否存在于列表中,如{% if "apple" in fruits %}
not
:否定操作,如{% if not is_member %}
for
循环
for
语句用于循环遍历列表、字典等数据结构。
<ul>
{% for item in items %}
<li>{{ item }}</li>
{% endfor %}
</ul>
forloop
内置变量
在 for
循环中,Django 提供了 forloop
变量来访问循环信息:
forloop.counter
:当前循环次数,从 1 开始forloop.counter0
:当前循环次数,从 0 开始forloop.revcounter
:倒序的循环次数forloop.first
:是否为第一次循环forloop.last
:是否为最后一次循环
<ul>
{% for item in items %}
<li>
{% if forloop.first %}First: {% endif %}
{{ item }}
</li>
{% endfor %}
</ul>
嵌套循环
可以嵌套 for
循环,使用 .
来访问子项。
{% for category in categories %}
<h2>{{ category.name }}</h2>
<ul>
{% for product in category.products %}
<li>{{ product.name }} - {{ product.price }}</li>
{% endfor %}
</ul>
{% endfor %}
4. 注释
在模板中使用 {# #}
来添加注释,注释不会显示在页面中。
{# 这是一个注释 #}
<p>{{ name }}</p>
5. 模板继承
模板继承允许创建基于基础模板的页面结构。
创建基础模板
定义一个基础模板 base.html
,并使用 {% block %}
标签定义可扩展的内容块:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>{% block title %}My Website{% endblock %}</title>
</head>
<body>
<header>
<h1>Welcome to My Website</h1>
</header>
<main>
{% block content %}{% endblock %}
</main>
<footer>
<p>© 2024 My Website</p>
</footer>
</body>
</html>
扩展基础模板
在子模板中,使用 {% extends 'base.html' %}
和 {% block %}
重定义内容:
{% extends 'base.html' %}
{% block title %}Homepage{% endblock %}
{% block content %}
<h2>This is the homepage</h2>
<p>Welcome to the homepage of My Website.</p>
{% endblock %}
6. 包含模板
使用 {% include %}
来包含其他模板文件,例如导航栏或页脚:
<header>
{% include 'partials/navbar.html' %}
</header>
7. 其他模板标签
Django 模板还支持其他一些模板标签:
{% url 'name' %}
:生成 URL,如<a href="{% url 'home' %}">Home</a>
{% csrf_token %}
:用于表单的防跨站请求伪造保护{% blocktrans %}
:支持国际化文本,如{% blocktrans %}Hello, world{% endblocktrans %}
8. 实例:使用全部语法示例
假设有以下情境:
- 需要遍历一个
products
列表,显示每个产品名称和价格。 - 判断价格,如果价格高于 100,显示“Expensive”。
- 使用模板继承和
for
循环。
{% extends 'base.html' %}
{% block title %}Product List{% endblock %}
{% block content %}
<h2>Our Products</h2>
<ul>
{% for product in products %}
<li>
{{ product.name }} - ${{ product.price }}
{% if product.price > 100 %}Expensive{% endif %}
</li>
{% empty %}
<p>No products available.</p>
{% endfor %}
</ul>
{% endblock %}
希望这些 Django 模板语言的语法和示例对你有所帮助!如果有任何疑问或其他需求,可以进一步咨询。
暂无评论内容