如何通过{{variable / method}}将Django模板代码注入模板?

时间:2016-10-10 14:09:41

标签: python html django templates django-templates

我有一个模型预约,我在很多模板中使用。创建它自己的HTML/Django片段是很方便的,它通过变量/模型方法注入到模板中。

原始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>...
                    ...

不幸的是它呈现了这样的东西:

enter image description here

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

2 个答案:

答案 0 :(得分:1)

如果你真的想继续使用这种方法然后只做字符串格式化,并将其标记为安全,则不要让模板这样做。

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

return mark_safe(desc)

答案 1 :(得分: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)