0

0

如何在 Flask Jinja 模板中正确使用变量设置交替背景色

聖光之護

聖光之護

发布时间:2026-01-05 17:41:32

|

467人浏览过

|

来源于php中文网

原创

如何在 Flask Jinja 模板中正确使用变量设置交替背景色

jinja2 中变量作用域有限,`{% set %}` 在 if-else 块内定义的变量无法在块外访问,导致 `{{ bg_color }}` 报错;应改用单行条件赋值,或更推荐使用 css `:nth-child()` 实现语义化、可维护的奇偶样式分离。

在 Flask 的 Jinja2 模板中,直接在 if-else 块内使用 {% set bg_color = '...' %} 会导致变量作用域受限——Jinja2(尤其是 3.0+ 版本)默认将 {% set %} 定义的变量限制在当前作用域块(如 {% if %}...{% endif %})内,因此后续 {{ bg_color }} 会因变量未定义而抛出 UndefinedError。

✅ 正确做法一:使用内联条件表达式(推荐,简洁安全)
将颜色逻辑内聚在一行中,避免作用域问题:

<div style="width: 50%; margin: auto">
  {% for comment in comments %}
    {% set bg_color = '#e6f9ff' if loop.index % 2 == 0 else '#eee' %}
    <div style="padding: 10px; background-color: {{ bg_color }}; margin: 20px">
      <p>#{{ loop.index }}</p><div class="aritcle_card flexRow">
                                                        <div class="artcardd flexRow">
                                                                <a class="aritcle_card_img" href="/ai/1332" title="WPS灵犀"><img
                                                                                src="https://img.php.cn/upload/ai_manual/001/431/639/68b6d67365ff5408.png" alt="WPS灵犀"  onerror="this.onerror='';this.src='/static/lhimages/moren/morentu.png'" ></a>
                                                                <div class="aritcle_card_info flexColumn">
                                                                        <a href="/ai/1332" title="WPS灵犀">WPS灵犀</a>
                                                                        <p>WPS灵犀是WPS推出的一款AI智能办公和学习助手</p>
                                                                </div>
                                                                <a href="/ai/1332" title="WPS灵犀" class="aritcle_card_btn flexRow flexcenter"><b></b><span>下载</span> </a>
                                                        </div>
                                                </div>
      <p style="font-size: 24px">{{ comment }}</p>
    </div>
  {% endfor %}
</div>

⚠️ 注意:loop.index 从 1 开始计数(即第 1 条为奇数),因此 loop.index % 2 == 0 对应偶数项(如第 2、4、6 条),匹配你期望的蓝色 #e6f9ff;奇数项自动获得灰色 #eee。

✅ 更优解法二:用纯 CSS 实现(强烈推荐)
将样式逻辑完全交由 CSS 处理,提升可维护性、可读性与性能:

<div class="comments">
  {% for comment in comments %}
    <div>
      <p>#{{ loop.index }}</p>
      <p class="comment-text">{{ comment }}</p>
    </div>
  {% endfor %}
</div>

<style type="text/css">
  .comments {
    width: 50%;
    margin: auto;
  }
  .comments > div {
    padding: 10px;
    margin: 20px;
    background-color: #e6f9ff; /* 默认:偶数项 */
  }
  .comments > div:nth-child(odd) {
    background-color: #eee; /* 覆盖:奇数项 */
  }
  .comment-text {
    font-size: 24px;
    margin: 0;
  }
</style>

? 优势说明:

  • 语义清晰:HTML 只负责结构,CSS 负责表现,符合关注点分离原则;
  • 无需模板逻辑:避免 Jinja 变量作用域陷阱,也减少服务端渲染负担;
  • 易于扩展:后续添加 hover、动画或响应式样式时,只需修改 CSS;
  • 兼容性强:nth-child 在所有现代浏览器中稳定支持(包括 IE9+)。

? 补充提示:

  • 若需兼容旧版 IE(
  • Jinja2 中 loop.index0(从 0 开始)也可用于判断,此时偶数项对应 loop.index0 % 2 == 0;
  • 避免在 style 属性中拼接大量动态值——复杂样式建议统一抽离至

综上,优先采用 CSS :nth-child() 方案;若必须用 Jinja 控制颜色,请始终确保 {% set %} 位于其使用位置的同一作用域层级,并优先选用内联条件表达式以规避作用域风险。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
Python Flask框架
Python Flask框架

本专题专注于 Python 轻量级 Web 框架 Flask 的学习与实战,内容涵盖路由与视图、模板渲染、表单处理、数据库集成、用户认证以及RESTful API 开发。通过博客系统、任务管理工具与微服务接口等项目实战,帮助学员掌握 Flask 在快速构建小型到中型 Web 应用中的核心技能。

100

2025.08.25

Python Flask Web框架与API开发
Python Flask Web框架与API开发

本专题系统介绍 Python Flask Web框架的基础与进阶应用,包括Flask路由、请求与响应、模板渲染、表单处理、安全性加固、数据库集成(SQLAlchemy)、以及使用Flask构建 RESTful API 服务。通过多个实战项目,帮助学习者掌握使用 Flask 开发高效、可扩展的 Web 应用与 API。

79

2025.12.15

if什么意思
if什么意思

if的意思是“如果”的条件。它是一个用于引导条件语句的关键词,用于根据特定条件的真假情况来执行不同的代码块。本专题提供if什么意思的相关文章,供大家免费阅读。

839

2023.08.22

class在c语言中的意思
class在c语言中的意思

在C语言中,"class" 是一个关键字,用于定义一个类。想了解更多class的相关内容,可以阅读本专题下面的文章。

768

2024.01.03

python中class的含义
python中class的含义

本专题整合了python中class的相关内容,阅读专题下面的文章了解更多详细内容。

24

2025.12.06

AI安装教程大全
AI安装教程大全

2026最全AI工具安装教程专题:包含各版本AI绘图、AI视频、智能办公软件的本地化部署手册。全篇零基础友好,附带最新模型下载地址、一键安装脚本及常见报错修复方案。每日更新,收藏这一篇就够了,让AI安装不再报错!

0

2026.03.04

Swift iOS架构设计与MVVM模式实战
Swift iOS架构设计与MVVM模式实战

本专题聚焦 Swift 在 iOS 应用架构设计中的实践,系统讲解 MVVM 模式的核心思想、数据绑定机制、模块拆分策略以及组件化开发方法。内容涵盖网络层封装、状态管理、依赖注入与性能优化技巧。通过完整项目案例,帮助开发者构建结构清晰、可维护性强的 iOS 应用架构体系。

24

2026.03.03

C++高性能网络编程与Reactor模型实践
C++高性能网络编程与Reactor模型实践

本专题围绕 C++ 在高性能网络服务开发中的应用展开,深入讲解 Socket 编程、多路复用机制、Reactor 模型设计原理以及线程池协作策略。内容涵盖 epoll 实现机制、内存管理优化、连接管理策略与高并发场景下的性能调优方法。通过构建高并发网络服务器实战案例,帮助开发者掌握 C++ 在底层系统与网络通信领域的核心技术。

25

2026.03.03

Golang 测试体系与代码质量保障:工程级可靠性建设
Golang 测试体系与代码质量保障:工程级可靠性建设

Go语言测试体系与代码质量保障聚焦于构建工程级可靠性系统。本专题深入解析Go的测试工具链(如go test)、单元测试、集成测试及端到端测试实践,结合代码覆盖率分析、静态代码扫描(如go vet)和动态分析工具,建立全链路质量监控机制。通过自动化测试框架、持续集成(CI)流水线配置及代码审查规范,实现测试用例管理、缺陷追踪与质量门禁控制,确保代码健壮性与可维护性,为高可靠性工程系统提供质量保障。

77

2026.02.28

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Sass 教程
Sass 教程

共14课时 | 0.9万人学习

Bootstrap 5教程
Bootstrap 5教程

共46课时 | 3.5万人学习

CSS教程
CSS教程

共754课时 | 39.3万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号