跳到主要内容

Django 变量和过滤器

Django模板系统是Django框架中用于生成HTML的强大工具。它允许开发者将Python代码与HTML分离,同时通过变量和过滤器动态渲染数据。本文将详细介绍如何在Django模板中使用变量和过滤器,并通过实际案例展示它们的应用。

什么是Django变量?

在Django模板中,变量用于将后端数据传递到前端页面。变量由双花括号 {{ }} 包裹,Django会在渲染模板时将其替换为实际的值。

示例:使用变量

假设我们在视图函数中传递了一个名为 username 的变量:

python
# views.py
def my_view(request):
context = {
'username': 'JohnDoe'
}
return render(request, 'my_template.html', context)

在模板中,我们可以这样使用这个变量:

html
<!-- my_template.html -->
<p>Welcome, {{ username }}!</p>

渲染后的HTML将是:

html
<p>Welcome, JohnDoe!</p>
备注

变量名区分大小写,确保在模板中使用的变量名与视图函数中传递的变量名一致。

什么是Django过滤器?

过滤器用于在模板中对变量进行格式化或处理。过滤器通过管道符号 | 应用,可以链式调用多个过滤器。

示例:使用过滤器

假设我们有一个变量 message,内容为 "hello world",我们可以使用 upper 过滤器将其转换为大写:

html
<p>{{ message|upper }}</p>

渲染后的HTML将是:

html
<p>HELLO WORLD</p>
提示

Django内置了许多过滤器,如 lowercapfirstdate 等。你可以在官方文档中查看完整的过滤器列表。

常用过滤器示例

1. default 过滤器

default 过滤器用于在变量为空或未定义时提供一个默认值。

html
<p>{{ user.bio|default:"No bio available." }}</p>

如果 user.bio 为空,渲染结果为:

html
<p>No bio available.</p>

2. date 过滤器

date 过滤器用于格式化日期变量。

html
<p>{{ post.published_date|date:"F j, Y" }}</p>

如果 post.published_date2023-10-05,渲染结果为:

html
<p>October 5, 2023</p>

3. length 过滤器

length 过滤器用于获取列表或字符串的长度。

html
<p>You have {{ items|length }} items in your cart.</p>

如果 items 是一个包含3个元素的列表,渲染结果为:

html
<p>You have 3 items in your cart.</p>

实际应用场景

场景1:显示用户评论

假设我们有一个博客应用,用户可以在文章下发表评论。我们希望在页面上显示评论内容,并确保评论内容为空时显示默认提示。

html
<div>
<h3>Comments</h3>
{% for comment in comments %}
<p>{{ comment.text|default:"No comment provided." }}</p>
{% endfor %}
</div>

场景2:格式化日期

在新闻网站上,我们希望以友好的格式显示文章的发布日期。

html
<p>Published on: {{ article.publish_date|date:"F j, Y" }}</p>

总结

Django模板系统中的变量和过滤器是动态渲染数据的关键工具。通过变量,我们可以将后端数据传递到前端页面;通过过滤器,我们可以对数据进行格式化或处理。掌握这些概念将帮助你更高效地构建动态网页。

附加资源

练习

  1. 创建一个Django视图,传递一个包含用户信息的字典(如 usernameemailbio),并在模板中使用变量和过滤器显示这些信息。
  2. 尝试使用 date 过滤器格式化当前日期,并将其显示在页面上。
  3. 使用 length 过滤器计算一个列表的长度,并根据长度显示不同的消息(如“空列表”或“列表中有X个元素”)。