【问题标题】:what are the differences between import and extends in Flask?Flask 中的 import 和 extends 有什么区别?
【发布时间】:2016-08-16 15:42:15
【问题描述】:

我正在阅读《Flask Web 开发》。 在例 4-3 中,

{% extends "base.html" %}
{% import "bootstrap/wtf.html" as wtf %}

我想知道: 扩展和导入有什么区别?(我认为它们在用法上非常相似。) 在什么情况下,我会使用extends还是import?

【问题讨论】:

    标签: python flask jinja2


    【解决方案1】:

    当你extend另一个模板时,模板控制你(被调用者控制调用者)——只有“父”模板中的命名块会被渲染:

    {% extends "base.html" %}
    {% block main_content %}
    Only shows up if there is a block called main_content
    in base.html.
    {% endblock main_content%}
    

    另一方面,import 只是将模板绑定到模板范围内的名称,您可以控制何时何地调用它(调用者控制被调用者):

    {% import "bootstrap/wtf.html" as wtf %}
    Some of your own template code with {{ wtf.calls() }} where it makes sense.
    

    【讨论】:

      【解决方案2】:

      不同。 {% extends parent.html %} 允许您渲染 parent.html 并覆盖其中定义的 {% block %},而 {% import %} 只允许您访问模板变量。

      所以示例模板扩展了base.html 并从bootstrap/wtf.html 导入变量。把它想象成python的类继承和import语句。

      【讨论】:

        【解决方案3】:

        默认情况下,包含的模板会传递给当前上下文,而导入的模板则不会。 Jinja documentation

        默认情况下,包含的模板不会被缓存,而导入的会。

        原因是导入经常被用作包含宏的模块。

        最好的做法是在包含宏的模板上使用导入,而当您只需要一些标记模板时最好使用包含。

        【讨论】:

          猜你喜欢
          • 2021-01-10
          • 1970-01-01
          • 2011-02-15
          • 1970-01-01
          • 2020-07-23
          • 2017-04-20
          • 2016-04-06
          • 1970-01-01
          • 2018-12-24
          相关资源
          最近更新 更多