【问题标题】:How do I render a Django template as a string when using the include tag?使用包含标签时,如何将 Django 模板呈现为字符串?
【发布时间】:2017-12-28 06:19:08
【问题描述】:

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

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

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

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

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

【问题讨论】:

  • 您想将模板 html 存储在 javascript 变量中吗?
  • 为什么你把你的html模板作为javascript变量,你实际上需要做什么?我认为这是个坏主意,但如果你真的需要将你的 html 模板存储为 javascript 变量,你可以遵循这个答案:stackoverflow.com/a/3410286/6396981,但我不知道如何添加字符+

标签: javascript django django-templates


【解决方案1】:

如果你使用 django-template 渲染你的 html。然后你可以在包含标签中使用变量来渲染子模板,如下所示:

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

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

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

【讨论】:

    【解决方案2】:

    发生这种情况是因为在您的 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>
      

    【讨论】:

    • 谢谢。看起来模板文字方法也可以,但我很确定浏览器支持仍然是一个问题。
    • 不完全是个问题...caniuse.com/#feat=template-literals。最好的问候!
    【解决方案3】:

    试试下面的方法。

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

    【讨论】:

    • 这个答案不起作用。它会产生 javascript 语法错误。正确的方法是使用render_to_string方法。
    猜你喜欢
    • 1970-01-01
    • 2011-08-27
    • 2011-04-28
    • 2018-08-30
    • 2012-11-17
    • 1970-01-01
    • 1970-01-01
    • 2022-01-25
    • 2013-07-23
    相关资源
    最近更新 更多