13

Django テンプレートから、ファイルから html スニペットを含めたいと思いますmysnippet.html

<div>
    blah
</div>

JavaScript変数に:

<script type="text/javascript">
     var myvar = {% include 'mysnippet.html' %}
</script>

問題は、新しい行をエスケープする必要があることです。それ以外の場合、Javascript は「終了していない文字列リテラル」について文句を言います。

スラッシュを追加できることは知っていますが、タグ{{x|addslashes}}に対してそれを行う方法がわかりません。{% include %}

4

3 に答える 3

21

filterテンプレートタグを試しましたか?

{% filter addslashes %}{% include 'mysnippet.html' %}{% endfilter %}

すべての特殊文字をより適切にエスケープするには、escapejsフィルターを使用します。

{% filter escapejs %}{% include 'mysnippet.html' %}{% endfilter %}
于 2011-04-03T00:43:11.103 に答える
2

Jerzykの提案に従って(ありがとう!)、私は使用しました

{% filter addslashes %}{% include 'mysnippet.html' %}{% endfilter %}

残念ながら、思ったように改行がエスケープされていないことに気付きましたが、引用符です。そこで、新しいフィルターを定義しました:

def escapenewline(value):
    """
    Adds a slash before any newline. Useful for loading a multi-line html chunk
    into a Javascript variable.
    """
    return value.replace('\n', '\\\n')
escapenewline.is_safe = True
escapenewline = stringfilter(escapenewline)

register.filter('escapenewline', escapenewline)

そして、addslashes の代わりにそれを使用しました:

{% filter escapenewline %}{% include 'mysnippet.html' %}{% endfilter %}

Django ドキュメントには、カスタム テンプレートに関するハウツーがあります。

于 2011-04-03T10:28:39.350 に答える
1

JavaScriptを使用していることに気づきました。jQuery といくつかの AJAX を一緒に使用してもかまわない場合は、javascript 変数に html を割り当てる別の方法があります。

スニペットを表示するビューを作成します。

# views.py
def mysnippet(request):
    return render(
        request,
        'yourapp/mysnippet.html',
    )

# urls.py
urlpatterns = patterns('yourapp.views',
    url(r'mysnippet/$', 'mysnippet', name='mysnippet'),
)

テンプレートに以下を配置するか、独自のファイルに JavaScript を分離することができます。

<script type="text/javascript">
$(document).ready(function() {
    $.get("/yourapp/mysnippet/", function(data) {
        var myvar = data;
    });
});
</script>

myvarその場合、新しい行をエスケープする必要はありません。

于 2011-04-03T02:36:15.963 に答える