Jinja2がhtmlを生成するためのフィルターとしてPythonマークダウンを使用しています。その一環として、レンダリング入力からテーブルエントリを入力します。マークダウンフィルターを介して入力を渡すと、常にテキストが段落タグでラップされるため、テーブル内のすべてのエントリがでラップされますが<p></p>
、これは望ましくありません。
マークダウンドキュメントとサードパーティの拡張機能リストを読みましたが、独自の拡張機能を作成する以外に、この動作を抑制する方法はないようです。段落タグの折り返しを抑制する他の方法はありませんか?それとも私はこれを間違った方法で行っていますか?
更新:これが私が今使っている汚い汚いひどいハックです:
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 -%}