2017-07-22 7 views
1

かいつまんで、私は文字列としてDjangoテンプレートを含めるしようとしている、と私はスクリプトタグでこのような何かをしたいと思います:includeタグを使用するときにDjangoテンプレートを文字列としてレンダリングするにはどうすればよいですか?

<script> 
    var template = '{% include "mytemplate.html" %}'; 
</script> 

今私は、無効または予期しないトークンエラーを取得しておきます次のような出力があります。

var template = '<h1>Hello World</h1> 
' 

最後に改行文字があるかどうか疑問です。 .trim()のようなものはうまく動作しないので、私はそれについて何かできるようになる前に効力を発揮しているようです。

+0

javascript変数にテンプレートhtmlを保存しますか? –

+0

なぜhtmlテンプレートをjavascript変数として入れるのですか?実際には何をする必要がありますか?私はそれは悪い考えだと思うが、もしあなたが本当にあなたのHTMLテンプレートをjavascript変数として保存する必要があるなら、この答えに従うことができる:https://stackoverflow.com/a/3410286/6396981、しかし、私は追加する方法を知らない文字 '+ ' –

答えて

-1

はこれ以下の方法を試してみてください。

<script> var template = '{% spaceless %}{% include "mytemplate.html" %}{% endspaceless %}'; </script> 
+0

まさに私が必要としたことです、ありがとうございます。出来た。 – zorrotmm

+1

この回答は機能しません。それはJavaScriptの構文エラーを生成します。正しい方法は 'render_to_string'メソッドを使うことです。 –

3

これは、HTMLテンプレート内にjavascript変数で受け入れられない改行文字があるために起こります。

あり、これを解決するには2通りの方法があるが、まず、あなたはこのように、render_to_stringを使用して(あなたのviews.pyファイル内の)変数にレンダリングされたテンプレートを保存する必要があります。

# views.py 

def my_view(request): 
    tmpl = render_to_string('the_included_template.html')) 
    return render(request, 'a_template.html', {'tmpl': tmpl}) 
  1. は、使用することができます

    <script> 
        var template = `{{ tmpl }}`; \\ backticks here 
    </script> 
    
  2. それとも、あなたが一時を使用しない場合:このようなES2015仕様のtemplate literals構文、あなたのHTMLの中に遅いリテラルがある場合は、改行文字をtmplから削除する必要があります。このように(名声以下NeErAj KuMaRの答えに、私は{% spaceless %}テンプレートタグを忘れてしまった!):

    <script> 
        var template = '{% spaceless %}{{ tmpl }}{% endspaceless %}'; \\ no backticks here 
    </script> 
    
+0

ありがとうございます。テンプレートのリテラルメソッドも同様に動作するようですが、私はブラウザのサポートはまだ問題であるとは確信しています。 – zorrotmm

+0

問題はありません... http://caniuse.com/#feat=template-literals。宜しくお願いします! –

関連する問題