2016-03-26 8 views
2

私は現在、どういうわけか私は私が複数のスニペットを区別できるように__str__を定義する必要があることを決めたWagtail:モデルの文字列表現にRichTextFieldを使用するにはどうすればよいですか?

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

このスニペットに取り組んでいます。文字列表現としてbodyの内容を使用すると良い考えになると思います。体は信じられないほど大きくなりますが、最初の20文字はすべきです。

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

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

...など<p>Quequeueueueue?</<p>FOO<br/></p>として醜い表現になった:このタスクを考える

はケーキの一部ですが、私はこのコードを書きました。

データベースを調べたところ、データベースにマークアップが格納されていることがわかりましたが、それはかなりわかりました。しかし、私はまだ不思議です。

CPUの重いHTMLパーサーを使用せずにHTMLマークアップを削除し、body全体を解析する方法は何ですか?

私は正規表現が一部タグを削除することができると信じていますが、どのように私は</a</blockqu<</のような状況を扱うのですか?

答えて

1

安全にHTMLをエスケープする組み込みの方法はありません。 docsから - バージョン1.8で撤廃

: はremovetags HTMLに安全な出力を保証することはできませんし、セキュリティ上の懸念のために廃止されました。代わりに漂白剤の使用を検討してください。

Bleachは、Mozillaのhtmlサニタイズライブラリです。すべてのタグを削除して、漂白された文字列を返すスニペットクラスのメソッドを作成するのが最も理にかなっているかもしれません。また

、あなたは文字/単語は、テンプレートのレンダリング時に表示されますどのように多くの制限するbuilt-in template tagstruncatewordstruncatecharsなどを使用することができます。

+0

返信いただきありがとうございます。単一のモデルに対して__str__メソッドを構築するだけでは、ライブラリ全体を必要とするのは「間違っている」のではないでしょうか。 – Morozzzko

+0

私は、外部ユーザーがデータを送信できるかどうかに依存していると答えています。 :)極端な安全性が必要ない場合、正規表現はそれを整理できるはずです! –

関連する問題