我正在使用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.html
块list_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>
有人知道如何继续吗?
谢谢, 爱德华
答案 0 :(得分:0)
只需制作一个html文件,然后在html文件中写入单个代码块,然后将该文件包含在您需要该代码的特定位置即可。这是不使用任何#block或#micro的最佳方法,并且对于每个代码块,请使用一个新的html文件,并通过将该文件包含在该位置来将该文件用作功能。