【问题标题】:Django render template variableDjango 渲染模板变量
【发布时间】:2016-05-22 07:19:40
【问题描述】:

我有一个名为“GOALS”的字段,它呈现为模板变量并存储在 django 模型中。该字段通过管理界面输入并包含原始 html,因此在 django 模板中有

<html>
...
<P>{{ GOALS|safe }}</P}
...
</html>

现在我想在使用我自己的模板标签将它放入上下文之前渲染这个变量。这将允许工作人员输入将查询数据库的标签,而不是硬编码变量,例如由 slug 识别的项目标题等。

我想过让他们输入模板标签如

GOALS = "... {{ "slug"|gettitle }} ..."

并在它进入上下文之前渲染目标

from django.template import Template, Context
html2render = "{% load episode_tags %}" + GOALS
miniTemplate = Template(html2render)
context = Context({})
GOALS = miniTemplate.render(context)

但是以这种方式使用 Template 加载我的模板标签不起作用,并且这会导致 TemplateSyntaxError 崩溃。所以我想我可以使用 ElementTree 和 XML,但在我继续做之前(这有点乏味)我想问问更广泛的社区是否有更好的方法来做到这一点。

【问题讨论】:

  • TemplateSyntaxError 说什么?您基本上在传递给Template 的模板中有一些错误,您必须修复它们,它会正常工作。
  • 这是 ipdb 的输出> p html2render u'

    你好 - {{ "LPPizzaToppingsRepresentingFractionsUpToQuarter"|field_from_slug }}

    \r\n\r\n
      \ r\n\t
    • 体验创建数据显示
    • \r\n\t
    • 了解如何解释数据显示
    • \ r\n\t
    • 发展数学比较词汇
    • \r\n
    \r\n' ipdb> n TemplateSyntaxError: Template..._slug'" ,)

标签: django templates rendering


【解决方案1】:

事实证明,我提出的解决方案是正确的(感谢@GwynBleidD)。 django admin 中允许输入字段的编辑器使用了自动呈现 html 的小部件 CKEditorWidget。它将引号" 变成&amp;quot;。我开始对小部件进行子类化以替换 html 安全引号,但我只是没有时间。我告诉用户期望在源代码中看到 &amp;quot; 并使用以下内容。

        # The GOALS field is rendered by the CKEditorWidget before it is stored.
        html2render = "{% load episode_tags %}" + GOALS.replace("&quot;", '"')
        try:
            miniTemplate = Template(html2render)
            context = Context({})
            GOALS = miniTemplate.render(context)
        except TemplateSyntaxError:
            pass

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-06-23
    • 1970-01-01
    • 2022-07-22
    • 2020-12-07
    • 2022-01-15
    • 2015-04-09
    • 2018-09-29
    • 2018-05-20
    相关资源
    最近更新 更多