长话短说,我试图将Django模板作为字符串包含在内,我想在脚本标记中执行类似的操作:
<script>
var template = '{% include "mytemplate.html" %}';
</script>
现在我不断收到无效或意外的令牌错误,输出如下:
var template = '<h1>Hello World</h1>
'
这让我想知道是否有某种换行符在最后生效?它似乎在我可以做任何事情之前生效,因为.trim()似乎不起作用。
答案 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})
现在,您可以使用ES2015规范的template literals语法,如下所示:
<script>
var template = `{{ tmpl }}`; \\ backticks here
</script>
或者,如果您不想在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>