【问题标题】:How to inject Django template code into template through {{ variable/method }}?如何通过{{变量/方法}}将Django模板代码注入模板?
【发布时间】:2017-02-18 23:48:49
【问题描述】:

我有一个模型预订,我在许多模板中使用它。创建自己的HTML/Djangosn-p 很方便,它通过变量/模型方法注入到模板中。

原始的HTML 使用该方法是正确的,但 Django 模板语言没有正确解释。

这是一种预订方式:

def get_html_description(self):
    return """<ul>
                <li><b>ID:</b> {{ reservation.id }}</li>
                <hr>
                <li><b>From:</b> {{ reservation.get_text_destination_from }}</li>
                <li><b>To:</b> {{ reservation.get_text_destination_to }}</li>
                <hr>
                <li><b>Date:</b> {{ reservation.get_date }}</li>
                <li><b>Time:</b> {{ reservation.get_time }}</li>
              </ul>"""

现在我正在尝试将此代码注入到模板中:

<div class="events">
     {% for reservation in data.1 %}
         <div class="event">
              <h4>{{ reservation.get_text_destination_from }} to {{ reservation.get_text_destination_to }}</h4>
              <div class="desc">
                  {% autoescape off %}{{ reservation.get_html_description }}{% endautoescape %}
              </div>...
                    ...

不幸的是,它呈现如下内容:

你知道该怎么做吗?我已经尝试过过滤器|safe{% autoescape off %}

【问题讨论】:

标签: python html django templates django-templates


【解决方案1】:

您要求的是双重替换,我认为 Django 模板引擎不会这样做。由于您是从 Reservation 实例中提取数据,因此我将使用字符串替换来填充它。例如:

 return """<ul>
                <li><b>ID:</b> {pk}</li>
                <hr>
                <li><b>From:</b> {destination_from}</li>
                ...
           </ul>""".format(pk=self.id,
                           destination_from=self.reservation.get_text_destination_from)

【讨论】:

    【解决方案2】:

    只是不要让模板去做,如果你真的想继续使用这种方法,那么只需进行字符串格式化,并将其标记为安全。

    desc = """<ul>
                <li><b>ID:</b> %(id)s</li>
              </ul>""" % { 'id': self.id }
    
    return mark_safe(desc)
    

    等等

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-09-28
      • 1970-01-01
      • 2020-09-26
      • 2011-09-26
      • 2013-05-26
      • 1970-01-01
      • 1970-01-01
      • 2020-11-06
      相关资源
      最近更新 更多