<p>这个答案听起来可能太宽泛了,但我建议切换到<em>模板引擎</em>,比如<a href="http://www.makotemplates.org/" rel="nofollow">^{<cd1>}</a>或<a href="http://jinja.pocoo.org/docs/dev/" rel="nofollow">^{<cd2>}</a>,而不是尝试使用字符串串联来手动构造HTML。您可以通过使用变量占位符和内置或自定义过滤器来解决这类问题。你知道吗</p>
<p>作为奖励,您可以很好地分离逻辑(Python代码)和表示(生成的HTML)。一个更干净、更易测试的代码。你知道吗</p>
<hr/>
<p>下面是一个使用<code>jinja2</code>(创建了<a href="http://jinja.pocoo.org/docs/dev/api/#custom-filters" rel="nofollow">custom ^{<cd4>} filter</a>)的工作示例:</p>
<pre><code>from jinja2 import Environment, FileSystemLoader
jiradb = [
{'total': 0, 'Resolution': None, 'key': u'CNSSDEBUG-151394', 'summary': u'[Lenovo][NFA344A][Win10] - [QCA6174_9377.WIN.1.0-10366-QCARMTFX86WZ-2] - Undetermined crash root cause'},
{'total': 1, 'Resolution': 'fixed', 'key': u'CNSSDEBUG-151395', 'summary': u'Some other summary'},
]
env = Environment(loader=FileSystemLoader('.'))
env.filters['rstrip'] = lambda value, s: value.rstrip(s) if value else ''
template = env.get_template('index.html')
print(template.render(jiradb=jiradb))
</code></pre>
<p><code>index.html</code>内容:</p>
<pre><code><table>
{% for item in jiradb %}
<tr>
<td>{{ loop.index }}</td>
<td>{{ item.key|rstrip("\n!") }}</td>
<td>{{ item.summary|rstrip("\n!") }}</td>
<td>{{ item.Resolution|rstrip("\n!") }}</td>
</tr>
{% endfor %}
</table>
</code></pre>
<p>印刷品:</p>
<pre><code><table>
<tr>
<td>1</td>
<td>CNSSDEBUG-151394</td>
<td>[Lenovo][NFA344A][Win10] - [QCA6174_9377.WIN.1.0-10366-QCARMTFX86WZ-2] - Undetermined crash root cause</td>
<td></td>
</tr>
<tr>
<td>2</td>
<td>CNSSDEBUG-151395</td>
<td>Some other summary</td>
<td>fixed</td>
</tr>
</table>
</code></pre>