8

Django では、ユーザーが HTML をフォーム フィールドに送信して保存し、HTML をテンプレートにレンダリングすることは可能ですか?

例として、ユーザーがテキストフィールド内にリンクを追加すると、残りのテキスト内でタグとしてレンダリングされる必要があります。

ユーザーは次のように入力します。

this is a site called <a href="http://stackoverflow.com">SO</a>.

SO リンクは、テキストとしてレンダリングするのではなく、リンクになります。

4

2 に答える 2

16

Django はデフォルトでエスケープします。自動エスケープ動作を防ぐために、フィルターまたはタグsafeを介して文字列をマークすることができます。

{{ my_text_with_html|safe }}

{% autoescape off %}
    {{ my_test_with_html }}
{% endautoescape %}

ユーザーが入力したhtmlを受け入れる場合は、スクリプトなどを記述できないようにサニタイズする必要があります..そのためには、python htmlサニタイズを検索して適用してから、データをテンプレートに送信します。

Python HTML サニタイザー / スクラバー / フィルター

于 2012-06-03T17:37:47.960 に答える
3

適切なフィルターでマークすることで、HTML が安全であることを Django に伝えることができます。

{{ variable|safe }}

autoescape タグを使用して、自動エスケープを無効にすることもできます。

{% autoescape off %}
    {{ variable }}
{% endautoescape %}

ただし、他の (不明な) ユーザーに対してこの機能を有効にする場合は、別のものを使用することを強くお勧めします。HTML は、Javascript やその他の不要な HTML から適切にサニタイズするのが非常に面倒なためです (例: on* -引数など)。実際、Django には、ユーザーに提供できるいくつかのマークアップ言語の基本的なサポートが付属しています。マークダウンが最も人気があると思います。

于 2012-06-03T17:46:56.293 に答える