从包含的文件

时间:2016-11-25 08:36:53

标签: python flask jinja2 flask-admin

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

我没有将Flask-Admin用作管理界面(仅供网站管理员使用),而是希望网站的所有用户都能使用它(利用Select2 JS利用表单来利用其出色的CRUD生成) lib,内联表单,带过滤的列表视图等。)。

考虑到这一点,我想覆盖列表视图模板以使用户更友好。为此,我正在做以下事情。

首先,在我看来,我重写了list_template

from flask_admin.contrib.sqla import ModelView

class FriendView(ModelView):

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

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

{% 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.htmllist_row_actions_column中使用了admin/model/list.html块,这是jinja2.exceptions.UndefinedError: there is no parent block called 'list_row_actions_column'. 中定义的Jinja块。 当然,这会引发以下错误:

panel.html

因为文件admin/model/list.html未展开panel

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

我知道我不能在另一个文件中分离面板,但是我的comint-dynamic-complete非常大,我认为这样做是好事,为了可读性和解耦。< / p>

有人知道如何继续吗?

谢谢, 爱德华

1 个答案:

答案 0 :(得分:0)

只需制作一个html文件,然后在html文件中写入单个代码块,然后将该文件包含在您需要该代码的特定位置即可。这是不使用任何#block或#micro的最佳方法,并且对于每个代码块,请使用一个新的html文件,并通过将该文件包含在该位置来将该文件用作功能。