我使用 python markdown作为 Jinja2 的过滤器来生成 html。作为其中的一部分,我从渲染输入中填写表格条目。通过降价过滤器传递输入总是将文本包装在段落标签中,因此表中的每个条目都包装在 中<p></p>
,这是我不想要的。
我已经阅读了降价文档和第 3 方扩展列表,但似乎除了编写我自己的扩展之外没有办法抑制这种行为。没有其他方法可以抑制段落标签换行吗?还是我以错误的方式解决这个问题?
更新:这是我现在正在使用的肮脏肮脏可怕的黑客:
def safe_markdown(text):
p = '<p>'
np = '</p>'
md = markdown.markdown(text)
if md.startswith(p) and md.endswith(np): #you filthy bastard
md = md[len(p):-len(np)]
return jinja2.Markup(md)
env = jinja2.Environment(...)
env.filters['markdown'] = safe_markdown
更新 2(回应亚伦的回答):
感谢您的帮助,但这绝对是导致问题的降价。这是 jinja 模板的示例部分:
{%- if spc.docs -%}
<td>{{ spc.docs|markdown }}</td></tr>
{%- else -%}
<td></td></tr>
{%- endif -%}
如果spc.docs
只是'foo'
生成的 html 将结束,<td><p>foo</p></td></tr>
除非我使用肮脏的黑客。
更新 3
这是一个不那么讨厌的黑客,虽然仍然是一个黑客而不是真正的“答案”,IMO。
def safe_markdown(text):
md = markdown.markdown(text)
return jinja2.Markup(md)
def safe_markdown_td(text):
text = ''.join(['<td>', text, '</td>'])
return safe_markdown(text)
env = jinja2.Environment(...)
env.filters['markdown'] = safe_markdown
env.filters['markdowntd'] = safe_markdown_td
那么模板就变成了:
{%- if spc.docs -%}
{{ spc.docs|markdowntd }}</tr>
{%- else -%}
<td></td></tr>
{%- endif -%}