我正在使用Pythonmarkdown https://python-markdown.github.io/作为 Jinja2 生成 html 的过滤器。作为其中的一部分,我从渲染输入中填充表条目。通过 markdown 过滤器传递输入总是将文本包装在段落标签中,因此表中的每个条目都包装在<p></p>
,这是我不想要的。
我已经阅读了 markdown 文档和第 3 方扩展列表,但除了编写我自己的扩展之外,似乎没有办法抑制这种行为。没有其他方法可以抑制段落标签换行吗?或者我以错误的方式处理这个问题?
Update:这是我现在使用的肮脏可怕的黑客:
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
Update 2(回应亚伦的回答):
感谢您的帮助,但这绝对是导致问题的降价。以下是 jinja 模板的示例部分:
{%- if spc.docs -%}
<td>{{ spc.docs|markdown }}</td></tr>
{%- else -%}
<td></td></tr>
{%- endif -%}
If spc.docs
简直就是'foo'
生成的 html 将最终为<td><p>foo</p></td></tr>
除非我使用肮脏的黑客。
Update 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 -%}