如何通过变量/方法将Django模板代码注入模板?

Posted

技术标签:

【中文标题】如何通过变量/方法将Django模板代码注入模板?【英文标题】: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 %

【问题讨论】:

创建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 文件

如何将参数传递给Django中模板变量的方法?

如何在 django 模板中为循环创建唯一的 javascript 变量名?

如何将javascript变量传递给django模板标签

如何将Django模板变量传递给外部JS?

Django:如何在模板中获取语言代码?