簡體   English   中英

Wagtail:如何使用 RichTextField 來表示模型的字符串?

[英]Wagtail: How do I use RichTextField for string representation of a model?

我目前正在研究這個片段

@register_snippet
class Foo(models.Model):
    body = RichTextField()

不知何故,我決定我需要定義__str__以便我可以區分多個片段。 我相信使用body內容作為字符串表示可能是一個好主意。 雖然,body 可以變得非常大,所以前 20 個字符應該可以。

認為這個任務是小菜一碟,我寫了這段代碼:

@register_snippet
class Foo(models.Model):
    body = RichTextField() 

    def __str__(self):
        return self.body[:20]

...這導致了丑陋的表示,例如<p>Quequeueueueue?</<p>FOO<br/></p>

我檢查了數據庫,發現標記存儲在數據庫中,這看起來很明顯。 雖然,我還是想知道。

在不使用 CPU-heavy HTML 解析器和解析整個body情況下刪除 HTML 標記的方法是什么?

我相信正則表達式可以刪除一些標簽,但我如何處理</a</blockqu<</

沒有內置的方法可以安全地轉義 html。 文檔-

1.8 版后已棄用removetags無法保證 HTML 安全輸出,出於安全考慮已棄用。 考慮使用漂白劑代替。

Bleach是一個來自 Mozilla 的 html 清理庫。 在您的代碼段類上創建一個返回漂白字符串並刪除所有標簽的方法可能是最有意義的。

此外,您可以使用內置模板標簽truncatewordstruncatechars等來限制模板渲染時顯示的字符/單詞數量。

正如@Ian Price 在評論中所建議的那樣,如果您可以信任您正在處理的內容,那么正則表達式就可以正常工作。 例如:

import re

...

def __str__(self):
    remove_tags = re.compile('<.*?>')
    return re.sub(remove_tags, '', self.body)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM