使用include标记时,如何将Django模板呈现为字符串?

时间:2017-07-22 03:56:43

标签: javascript django django-templates

长话短说,我试图将Django模板作为字符串包含在内,我想在脚本标记中执行类似的操作:

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

现在我不断收到无效或意外的令牌错误,输出如下:

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

这让我想知道是否有某种换行符在最后生效?它似乎在我可以做任何事情之前生效,因为.trim()似乎不起作用。

3 个答案:

答案 0 :(得分:3)

这种情况正在发生,因为在HTML模板中有新行字符,javascript变量不接受这些字符。

有两种方法可以解决这个问题,但首先必须使用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. 现在,您可以使用ES2015规范的template literals语法,如下所示:

    <script>
        var template = `{{ tmpl }}`;  \\ backticks here
    </script>
    
  2. 或者,如果您不想在HTML中使用模板文字,则必须从tmpl中删除任何换行符。就像这样(感谢NeErAj KuMaR下面的答案,我忘记了{% spaceless %}模板标签!):

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

答案 1 :(得分:0)

如果您正在使用django-template渲染html。然后,您可以在include标记内使用变量来呈现子模板,如下所示:

content = "template1.html"    #child template located in templates folder of your app

然后在parent.html中,您可以定义:

 {% include ""|add:content with title=title %}

答案 2 :(得分:-1)

请尝试以下方式。

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