13

私が欲しいのはスタックオーバーフローのようなものです。ユーザーはテキスト入力をHTML形式でフォーマットでき、ページはまったく同じ方法でレンダリングする必要があります。

フォーマットされた入力を格納するためにを使用します。文字列値をwmd.js持つコンテキスト変数があると考えてください。テンプレートをレンダリングすると、{{variable}}"<p>something</p>"

{{variable}} outputs <p>something</p>

and {{variable|safe}} also output <p>something</p>

ページにhtmlタグをテキストとして表示します。HTMLタグをレンダリングする{{variable}}が、プレーンテキストとして表示しない方法。

テンプレート

    <div id='thread_answer_content' >
        {% for answer in question.answer_set.all %}
            {{answer.answerbody|safe}}
        {% endfor %}
    </div>

景色

def detail(request,question_id):
q = get_object_or_404(Question,pk=question_id)
return render_to_response('CODE/detail.html',{'question':q},
        context_instance = RequestContext(request)
    )

これが質問のdjango管理ページです。ちなみにsqlite3を使用しています ここに画像の説明を入力してください

4

4 に答える 4

24

タグを使用:http://docs.djangoproject.com/en/dev/ref/templates/builtins/#autoescape

{% autoescape off %}{{ variable }}{% endautoescape %} 
于 2012-12-27T13:38:58.857 に答える
2

の代わりに、を使用escapeしてレンダリングすることをお勧めしますsafe

{{ variable|escape }}
于 2012-12-25T09:50:02.360 に答える
2

単純なHTMLフォーマットの場合は、を使用します<p>{{something}}</p>。そして、Javascriptの方法は、

<script type="text/javascript">
    var variable  =  "<p>{{something}}</p>";
    document.write(variable);
</script>

それ{{something}}自体にHTMLタグが含まれている場合は、{{something|safe}}がない限り、それ自体が機能するはずです{% autoescape on %}。フィルタリングとフォーマットの詳細については、組み込みのテンプレートタグとフィルターを参照してください。

于 2012-12-26T07:04:56.593 に答える
0

firstofこれに対する別のアプローチは、タグを使用することだと思います。

firstofタグに含まれる変数はエスケープされないことに注意してください。これは、テンプレートタグがコンテンツをエスケープしないためです。印刷された変数に含まれるHTMLまたはJavascriptコードはそのままレンダリングされるため、セキュリティの問題が発生する可能性があります。firstofタグの変数をエスケープする必要がある場合は、明示的にエスケープする必要があります

{% firstof variable %}
于 2013-01-03T20:29:07.600 に答える