禁止 python markdown 在

中换行文本

2024-04-07

我正在使用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 -%}

任何时候你使用 markdown,你都必须接受对 html 最终结构的一些相当严重的妥协。有许多结构你根本无法表达。不要将其视为 html 的替代品,而应将其视为另一种简单编写内容的语言。

可能发生的情况是,将表格单元格内容包装在段落标签中会弄乱您的布局,在这种情况下,您应该使用 CSS 来修复它:

td p {
  margin: 0;
  padding: 0;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

禁止 python markdown 在

中换行文本 的相关文章

随机推荐