You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Jinja2模板中用Bootstrap/JS实现Jira状态颜色动态显示?

优化Jira状态颜色显示的几种简洁方案

绝对有更简洁的方法!你现在的Jinja2重复判断确实有点冗余,下面给你几个实用的方案,包括你想要的类似status('state')的便捷调用方式,还有贴合Bootstrap的实现:

方案1:用Jinja2宏(Macro)封装逻辑

既然你已经在使用Jinja2,最直接的优化就是把状态判断逻辑封装成宏,这样不用重复写一堆if-elif,调用起来超方便:

{% macro render_status(state) %}
  {% set status_classes = {
    'Open': 'text-primary',
    'In Progress': 'text-info',
    'Reopened': 'text-warning',
    'Resolved': 'text-success',
    'Closed': 'text-danger'
  } %}
  <p class="{{ status_classes.get(state, 'text-secondary') }}">{{ state }}</p>
{% endmacro %}

然后在模板里直接调用就行:

{{ render_status('Closed') }}
{{ render_status('In Progress') }}

这个方案完全在模板层面解决,不需要额外脚本,而且维护起来只需要修改status_classes字典就行,新增状态也很方便。

方案2:自定义JavaScript函数实现status('state')调用

如果你想通过HTML脚本的方式实现类似status('state')的调用,可以写一个简单的JS函数,动态生成带样式的状态元素:

<script>
function status(state) {
  const classMap = {
    'Open': 'text-primary',
    'In Progress': 'text-info',
    'Reopened': 'text-warning',
    'Resolved': 'text-success',
    'Closed': 'text-danger'
  };
  const className = classMap[state] || 'text-secondary';
  return `<p class="${className}">${state}</p>`;
}
</script>

然后在页面里可以这样用(如果是结合Jinja2渲染,直接把状态变量传进去):

<script>
document.getElementById('status-container').innerHTML = status('{{ state }}');
</script>
<div id="status-container"></div>

或者如果是静态调用,直接写:

<div>
  <script>document.write(status('Closed'))</script>
</div>

方案3:结合Bootstrap Badge组件(更美观)

如果你想贴合Bootstrap的组件风格,用Badge来显示状态会更专业,同样可以配合Jinja2或者JS实现:

用Jinja2映射类名:

{% set badge_classes = {
  'Open': 'bg-primary',
  'In Progress': 'bg-info',
  'Reopened': 'bg-warning',
  'Resolved': 'bg-success',
  'Closed': 'bg-danger'
} %}
<span class="badge {{ badge_classes.get(state, 'bg-secondary') }}">{{ state }}</span>

用JS动态生成Badge:

<script>
function renderStatusBadge(state) {
  const badgeClasses = {
    'Open': 'bg-primary',
    'In Progress': 'bg-info',
    'Reopened': 'bg-warning',
    'Resolved': 'bg-success',
    'Closed': 'bg-danger'
  };
  const className = badgeClasses[state] || 'bg-secondary';
  return `<span class="badge ${className}">${state}</span>`;
}
</script>

调用方式和之前的JS函数类似,这样显示的状态是Bootstrap自带的徽章样式,视觉效果更好。

推荐优先用方案1,因为完全在模板层处理,不需要依赖JS,而且符合你当前的技术栈;如果一定要用脚本方式,方案2或3都能满足你的需求。

内容的提问来源于stack exchange,提问作者Raj

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:06:47