如何通过变量/方法将Django模板代码注入模板?
Posted
技术标签:
【中文标题】如何通过变量/方法将Django模板代码注入模板?【英文标题】:How to inject Django template code into template through variable/method ?如何通过变量/方法将Django模板代码注入模板? 【发布时间】:2017-02-18 23:48:49 【问题描述】:我有一个模型预订,我在许多模板中使用它。创建自己的html/Django
sn-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 %
【问题讨论】:
创建inclusion tag 可能比在模型中存储模板更好。 【参考方案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)
等等
【讨论】:
以上是关于如何通过变量/方法将Django模板代码注入模板?的主要内容,如果未能解决你的问题,请参考以下文章
Django:将带有 HTML 和 Django 模板标签的 Views.py 中的字符串变量注入 HTML 文件