私はしばしば、Markdown形式のリッチテキストを保持するText
列のモデルを作成します。私のモデルは次のようになります。宣言型SQLAlchemyを使用してコンパウンド列を作成するにはどうすればよいですか?
class Document(Base):
id = Column(Integer, primary_key=True)
title = Column(Unicode(250))
description = Column(Text)
description_html = Column(Text)
私の編集フォームは、(A)から読み取られ、description
に書き込み、その後、(b)はdescription_html
にマークダウンフォーマットされたバージョンを作成します。 My(Jinja2)ビューテンプレート(c){{ doc.description_html|safe }}
でHTMLバージョンを読み込みます。
私はこのように、1つの列定義にこれら三つの定期的な作業を削減したいと思います:
- がで2つの列を作り:
MarkdownText
は、新しい列の型があるclass Document(Base): id = Column(Integer, primary_key=True) title = Column(Unicode(250)) description = Column(MarkdownText)
を
- カラムへの書き込み時に、Markdownフォーマットのバージョンをhtmlカラムに書き込み、
- html列の内容を返すメソッド
__html__()
を提供します。これにより、safe
フィルタを使用しないで、Jinja2テンプレートから{{ doc.description }}
として使用できるようになります。
質問:#1は可能ですか? 2つの列を作成する列を定義できますか?
あなたは本当にソースと結果の両方のテキストをデータベースに保存しますか? ? – plaes
はい、キャッシュしたいと思います。編集ごとに1回だけ生成する必要がある場合は、すべてのビューまたはmemcacheの有効期限が切れるたびにCPU時間を無駄にするのはなぜですか?ディスクはCPUよりも安価です。 –