【问题标题】:Calling Jinja block from included file从包含的文件中调用 Jinja 块
【发布时间】:2016-11-25 08:36:52
【问题描述】:

我正在使用 Flask 0.11.1 和 Flask-Admin 1.4.2 在 Python 3.5 中构建一个小型 Web 应用程序。

我希望网站的所有用户都可以使用 Flask-Admin 作为管理界面,而不是使用 Flask-Admin 作为管理界面(以利用 Select2 JS 生成的令人敬畏的 CRUD 生成) lib、内联表单、带有过滤功能的列表视图等)。

考虑到这一点,我想覆盖列表视图模板以更加用户友好。为此,我正在执行以下操作。

首先,在我看来,我会覆盖list_template

from flask_admin.contrib.sqla import ModelView

class FriendView(ModelView):

    list_template = 'friend/list.html'
    ...

然后,我通过扩展admin/model/list.html 并覆盖其中定义的块model_list_table 来编写friend/list.html 文件:

{% extends 'admin/model/list.html' %}

{% block model_list_table %}
  {% for row in data %}
    <div class="col-xs-6 col-sm-4 col-md-3">
      {% include 'friend/panel.html' %}
    </div>
  {% endfor %}
{% endblock %}

panel.html 文件代表一个引导程序 panel,说明每个朋友:

<div class="panel panel-success">
  <div class="panel-heading">
    This friend is named {{ row.name }}.
  </div>
  <div class="panel-body">
    {% block list_row_actions_column scoped %}
      {{ super() }}
    {% endblock %}
  </div>
  <div class="panel-footer">
  ...
  </div>
</div>

问题出在这里:如您所见,我在panel.html 中使用了list_row_actions_column 块,这是admin/model/list.html 中定义的Jinja 块。 当然,这会引发以下错误:

jinja2.exceptions.UndefinedError: there is no parent block called 'list_row_actions_column'.

因为文件panel.html 没有扩展admin/model/list.html

我尝试将panel 定义为Jinja macro 并将其导入friend/list.html,这会引发同样的错误...

我知道我不能简单地将面板分离到另一个文件中,但是我的 friend/list.html 非常大,我认为这样做是件好事,为了可读性和解耦。

有人知道我可以如何进行吗?

谢谢, 爱德华

【问题讨论】:

  • 我认为这不会以这种方式工作。你需要反过来做,让panel.html扩展你的list.html,扩展admin/model/list.html。这样您就可以访问list_row_actions_column
  • 您好,感谢您的回答。但是,我想在我的list.html 中添加多个panel。如果我的panel.html 扩展了我的list.html,我需要将panel.html 作为模板返回,这不是我想要的。

标签: python flask jinja2 flask-admin


【解决方案1】:

只需创建一个 html 文件并在 html 文件中编写单个代码块,然后将该文件包含到您需要该代码的特定位置。这是不使用任何 #block 或 #micro 的最佳方法,并且对于每个代码块使用一个新的 html 文件并通过将其包含在该位置来将此文件用作函数。

【讨论】:

  • 这并没有具体回答 OP 的问题。请添加代码来说明您的观点
猜你喜欢
  • 2011-03-21
  • 1970-01-01
  • 1970-01-01
  • 2019-11-25
  • 2011-08-17
  • 2019-05-30
  • 2011-05-16
  • 2020-06-12
  • 1970-01-01
相关资源
最近更新 更多