我有一个模型预约,我在很多模板中使用。创建它自己的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>...
...
不幸的是它呈现了这样的东西:
你知道该怎么办吗?我已经尝试过滤|safe
和{% autoescape off %}
答案 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)