我經常製作帶有Markdown格式的richtext的Text
列的模型。我的模型是這樣的:如何用SQLAlchemy聲明式創建複合列?
class Document(Base):
id = Column(Integer, primary_key=True)
title = Column(Unicode(250))
description = Column(Text)
description_html = Column(Text)
我的編輯形式(一)從讀寫description
,然後(B)寫的降價格式的版本description_html
。我的(Jinja2)視圖模板(c)使用{{ doc.description_html|safe }}
加載HTML版本。
我想這三個經常性操作減少爲一所定義,像這樣:
class Document(Base):
id = Column(Integer, primary_key=True)
title = Column(Unicode(250))
description = Column(MarkdownText)
哪裏MarkdownText
是一個新的列類型:
- 使在兩列數據庫表(description and description_html),
- 在寫入列時,還會將一個Markdown格式的版本寫入html列,並且
- 提供返回html列內容的
__html__()
方法。這將允許從Jinja2模板中使用{{ doc.description }}
而不使用safe
過濾器。
問題:#1可能嗎?我可以定義製作兩列的列嗎?
你真的想在數據庫中同時存儲源文本和結果html文本? – plaes 2012-03-05 14:29:36
是的,我寧願緩存它。爲什麼要爲每個視圖或每當memcache過期時爲其重新生成CPU時間,如果每次編輯只需要生成一次呢?磁盤比CPU便宜。 – 2012-03-05 17:02:40