跳转到内容
主菜单
主菜单
移至侧栏
隐藏
导航
首页
最近更改
随机页面
MediaWiki帮助
代码酷
搜索
搜索
中文(中国大陆)
外观
创建账号
登录
个人工具
创建账号
登录
未登录编辑者的页面
了解详情
贡献
讨论
编辑“︁
Django变量和过滤器
”︁(章节)
页面
讨论
大陆简体
阅读
编辑
编辑源代码
查看历史
工具
工具
移至侧栏
隐藏
操作
阅读
编辑
编辑源代码
查看历史
常规
链入页面
相关更改
特殊页面
页面信息
外观
移至侧栏
隐藏
您的更改会在有权核准的用户核准后向读者展示。
警告:
您没有登录。如果您进行任何编辑,您的IP地址会公开展示。如果您
登录
或
创建账号
,您的编辑会以您的用户名署名,此外还有其他益处。
反垃圾检查。
不要
加入这个!
= Django变量和过滤器 = Django模板系统中的'''变量'''和'''过滤器'''是动态渲染HTML内容的核心机制。变量用于在模板中显示动态数据,而过滤器则用于在显示前对变量值进行格式化或处理。本教程将详细介绍它们的语法、用法及实际应用场景。 == 变量 == 变量是Django模板中引用上下文中传递的数据的基本方式,语法为双花括号:<code>{{ variable_name }}</code>。当模板引擎渲染时,它会用上下文中的实际值替换这些变量。 === 基本用法 === 假设在视图(view)中传递了如下上下文: <syntaxhighlight lang="python"> def my_view(request): context = { 'username': 'Alice', 'age': 25, 'books': ['Python入门', 'Django实战', 'Web开发进阶'] } return render(request, 'my_template.html', context) </syntaxhighlight> 在模板文件(my_template.html)中,可以通过变量名直接访问: <syntaxhighlight lang="django"> <p>用户名: {{ username }}</p> <p>年龄: {{ age }}</p> <p>第一本书: {{ books.0 }}</p> <!-- 访问列表索引 --> </syntaxhighlight> 输出结果: <syntaxhighlight lang="html"> <p>用户名: Alice</p> <p>年龄: 25</p> <p>第一本书: Python入门</p> </syntaxhighlight> === 变量解析规则 === Django模板引擎按以下顺序解析变量: # 字典键查找(如 <code>{{ user.name }}</code> 对应 <code>user['name']</code>) # 属性查找(如 <code>{{ user.name }}</code> 对应 <code>user.name</code>) # 列表/元组索引查找(如 <code>{{ items.0 }}</code>) 如果变量不存在,模板系统会静默失败(不报错,输出空字符串)。 == 过滤器 == 过滤器通过管道符(<code>|</code>)对变量进行转换,语法为 <code>{{ variable|filter_name:arg }}</code>。Django内置了60+个过滤器,涵盖字符串处理、日期格式化、数学运算等场景。 === 常用过滤器示例 === ==== 字符串处理 ==== <syntaxhighlight lang="django"> {{ "hello world"|title }} <!-- 输出 "Hello World" --> {{ "Django"|lower }} <!-- 输出 "django" --> {{ "Python is great"|truncatechars:10 }} <!-- 输出 "Python i..." --> </syntaxhighlight> ==== 数值处理 ==== <syntaxhighlight lang="django"> {{ 12345|filesizeformat }} <!-- 输出 "12.1 KB" --> {{ 3.1415926|floatformat:2 }} <!-- 输出 "3.14" --> </syntaxhighlight> ==== 日期格式化 ==== 假设上下文中有 <code>date = datetime.datetime.now()</code>: <syntaxhighlight lang="django"> {{ date|date:"Y-m-d H:i" }} <!-- 输出类似 "2023-08-15 14:30" --> {{ date|timeuntil }} <!-- 输出 "2 hours, 30 minutes" --> </syntaxhighlight> === 自定义过滤器 === 如需创建自定义过滤器: 1. 在应用目录下创建 <code>templatetags/</code> 文件夹 2. 新建 <code>__init__.py</code> 和自定义模块(如 <code>my_filters.py</code>) 3. 编写过滤器函数并注册: <syntaxhighlight lang="python"> from django import template register = template.Library() @register.filter def multiply(value, arg): return float(value) * float(arg) </syntaxhighlight> 使用方式: <syntaxhighlight lang="django"> {% load my_filters %} {{ 5|multiply:3 }} <!-- 输出 15 --> </syntaxhighlight> == 实际应用案例 == === 案例1:用户资料页面 === 假设需要显示用户信息,并对敏感数据脱敏: <syntaxhighlight lang="django"> <p>用户名: {{ user.username|capfirst }}</p> <p>邮箱: {{ user.email|slice:":3" }}***@{{ user.email|split:"@"|last }}</p> <p>注册时间: {{ user.join_date|date:"F j, Y" }}</p> </syntaxhighlight> === 案例2:电商价格展示 === <syntaxhighlight lang="django"> {% for product in products %} <div class="product"> <h3>{{ product.name }}</h3> <p>原价: <del>{{ product.price|floatformat:2 }}元</del></p> <p>折扣价: {{ product.price|multiply:0.8|floatformat:2 }}元</p> <p>库存: {{ product.stock|default:"暂时缺货" }}</p> </div> {% endfor %} </syntaxhighlight> == 过滤器链 == 可以串联多个过滤器,执行顺序从左到右: <syntaxhighlight lang="django"> {{ " HELLO "|lower|truncatechars:5|title }} <!-- 输出 "He..." --> </syntaxhighlight> == 高级特性 == === 条件过滤 === 通过 <code>default_if_none</code> 和 <code>default</code> 处理空值: <syntaxhighlight lang="django"> {{ user.bio|default:"暂无简介" }} <!-- 仅当bio为False时触发 --> {{ user.bio|default_if_none:"暂无简介" }} <!-- 仅当bio为None时触发 --> </syntaxhighlight> === 安全相关 === 使用 <code>escape</code> 或 <code>safe</code> 过滤器控制HTML转义: <syntaxhighlight lang="django"> {{ "<script>alert('xss')</script>"|escape }} <!-- 输出转义后的HTML --> {{ "<strong>安全内容</strong>"|safe }} <!-- 输出原始HTML --> </syntaxhighlight> == 性能考虑 == 过滤器在模板渲染时实时计算,频繁使用的复杂逻辑建议在视图中预处理。例如: * 避免:<code>{{ large_list|slice:":100"|join:", " }}</code> * 推荐:在视图中预先切片和拼接字符串 == 总结 == Django的变量和过滤器系统提供了灵活的数据展示能力。关键要点: * 变量语法:<code>{{ variable }}</code> * 过滤器语法:<code>{{ variable|filter }}</code> * 过滤器可串联、带参数 * 内置过滤器覆盖常见需求,支持自定义扩展 * 注意安全性和性能优化 通过合理组合变量和过滤器,可以显著减少模板中的业务逻辑,保持代码清晰。 [[Category:后端框架]] [[Category:Django]] [[Category:Django模板系统]]
摘要:
请注意,所有对代码酷的贡献均被视为依照知识共享署名-非商业性使用-相同方式共享发表(详情请见
代码酷:著作权
)。如果您不希望您的文字作品被随意编辑和分发传播,请不要在此提交。
您同时也向我们承诺,您提交的内容为您自己所创作,或是复制自公共领域或类似自由来源。
未经许可,请勿提交受著作权保护的作品!
取消
编辑帮助
(在新窗口中打开)