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

Django模板中HTML按钮内文本格式化优化技术咨询

优化手风琴按钮内文本的格式化显示

首先修正你CSS里的小问题:.myButtonClass中的white-space:normal后面缺少分号,会导致后续的border样式失效,补上即可:

.myButtonClass{
  display:inline-block;
  padding:8px 16px;
  vertical-align:middle;
  overflow:hidden;
  cursor:pointer;
  width:100%;
  text-align:left;
  white-space:normal; /* 补上分号 */
  border:1px solid #ccc;
  display:block;
  color:#000;
  background-color:#f1f1f1;
  margin-bottom:16px;
}

另外你Python代码里有个语法错误:{event_type]的右括号应该是大括号,改成{event_type}。

接下来针对你要实现的缩进/分块格式,提供两种实用方案:

方案1:模板内拆分数据构建结构化HTML(推荐)

不要在Python端拼接成纯文本summary,直接把event_type和event_desc作为字段传递到模板,在模板里构建带样式的结构,更灵活易维护:

模板修改:

{% for event in event_data.data %}
    <button onclick="myFunction('{{forloop.counter}}')" class="myButtonClass">
      <div class="summary-row">
        <span class="summary-label">type:</span>
        <span class="summary-content">{{ event.event_type }}</span>
      </div>
      <div class="summary-row">
        <span class="summary-label">description:</span>
        <span class="summary-content">{{ event.event_desc }}</span>
      </div>
    </button>
    <div id={{forloop.counter}} class="w3-container w3-hide">
        <pre>{{ event.data_raw | pprint }}</pre>
    </div>
{% endfor %}

添加对应CSS:

/* 按钮内的行容器 */
.summary-row {
  margin: 4px 0;
  line-height: 1.4;
}
/* 标签固定宽度,实现对齐 */
.summary-label {
  font-weight: bold;
  display: inline-block;
  width: 100px;
}
/* 内容换行后自动缩进,和标签对齐 */
.summary-content {
  display: inline-block;
  margin-left: 8px;
  text-indent: -108px;
  padding-left: 108px;
}

这个方案能让长内容换行后自动缩进,保持和标签的对齐,实现规整的分块效果。

方案2:Python端生成HTML片段,模板安全渲染

如果必须在Python端处理summary,可以生成带HTML标签的字符串,然后用Django的safe滤镜渲染:

Python代码修改:

summary = (f"<div class='summary-row'><span class='summary-label'>type:</span> <span class='summary-content'>{event_type}</span></div>"
           f"<div class='summary-row'><span class='summary-label'>description:</span> <span class='summary-content'>{event_desc}</span></div>")

模板修改:

把原来的{{ event.summary|linebreaks }}改成{{ event.summary|safe }},让Django直接渲染HTML标签而非转义:

<button onclick="myFunction('{{forloop.counter}}')" class="myButtonClass">{{ event.summary|safe }}</button>

同样需要添加方案1里的.summary-row、.summary-label、.summary-content样式。

两种方案都能实现你想要的缩进/分块效果,推荐方案1,它将数据与视图渲染分离,更符合Django的设计理念,也方便后续调整样式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 14:22:10