文書を読んだら、mark_safe()はまだ神話のようです。私はそれがCSRFに関係していると思います。しかし、なぜ、いつ、mark_safe()を使うべきですか?
ここにはドキュメントがあります
mark_safe(s)[ソース]¶
明示的に文字列を(HTML) 出力目的。返されるオブジェクトは、文字列のどこでも使用できます またはユニコードオブジェクトが適切です。
1つの文字列に対して複数回呼び出すことができます。
HTMLの断片を構築するには、通常は 代わりにdjango.utils.html.format_html()を使用してください。
safeとマークされた文字列は、変更された場合に再び危険になります。例えば:
回答:
回答№1の11Djangoはデフォルトで "正しい"ことをしようとするフレームワークです。これは、あなたが最も簡単なことをするときに、適切に正しいことをしていることを意味します。
今、phpとpythonのテンプレートを見てみましょう:
PHP:
<? echo $foo ?>
与えることができる:
<script src="evil">
Django:
{{ foo }}
同じ入力を与えます:
>script src="evil"<
ここで、リンクを配置するとします。 <a href="link">text</a>
。それから、djangoはそれをテキストとしてレンダリングします <>
再び。あなたが何をやっているのか分かっているなら、 mark_safe
テキストが信頼できる(すなわち、ユーザ入力から来ていない)ことを示す。
通常、あなたは使用します {{ foo|safe }}
または {% autoescape off %}{{ foo }}{% endautoescape %}
djangoプログラマーとしてのテンプレートでは、文字列が安全であると宣言されたときにはより明確になります。
だから、どこに mark_safe
中古? 独自のtemplatetagsやフィルタを書くときは、Pythonから安全であるとマークする必要があります。なぜなら、{{foo | mylinkifyfunction}}が正しいことをしている(つまり、url fooをエスケープしますが、エスケープしませんその <a href=""></a>
URLの周りに)。