传递其他对象/数据到Flask Admin模型视图编辑模板



我正在扩展ModelView的编辑模板,以便我可以显示来自数据库的一些其他信息,这些信息与确定如何编辑该视图中的记录有关。我知道如何扩展模板并使其工作,但我不知道如何查询对象并在模板中使用它。

我还需要使用模型/记录中的值来查询我需要传递的新对象。

这是我的代码从initpy:
class MilestoneView(ModelView):
edit_template = '/admin/milestone_model/milestone_edit.html'
can_delete = True
#i need something like this to work:
referrals = Referral.query.filter_by(email=model.email)
#then i need to pass referrals into the template
admin = Admin(app, name="My App", template_mode='bootstrap3')
admin.add_view(MilestoneView(Milestone, db.session, name='Milestones'))

然后从里程碑编辑。html,我想这样的工作:

{% extends 'admin/model/edit.html' %}
{% block body %}
{{ super() }}
{% for r in referrals %}
<p>{{ r.name }}</p>
{% endif %}
{% endblock %}

但是referrals对象当然不能在模板中使用。我如何自定义这个ModelView,以便从初始化文件传递这个对象?我已经在这里查看了关于这个主题的可用帖子,但还没有找到答案。提前谢谢。

重写视图的render方法,查看Github上的代码,并测试正在渲染的视图是否为编辑视图。现在可以将任何数据注入kwargs参数。例如:

class MilestoneView(ModelView):
def render(self, template, **kwargs):
# we are only interested in the edit page
if template == 'admin/model/milestone_edit.html':
# Get the model, this is just the first few lines of edit_view method
return_url = get_redirect_target() or self.get_url('.index_view')
if not self.can_edit:
return redirect(return_url)
id = get_mdict_item_or_list(request.args, 'id')
if id is None:
return redirect(return_url)
model = self.get_one(id)
if model is None:
flash(gettext('Record does not exist.'), 'error')
return redirect(return_url)
referrals = Referral.query.filter_by(email=model.email)
kwargs['referrals'] = referrals
return super(MilestoneView, self).render(template, **kwargs)

注意如何检索模型。这是方法edit_view代码的直接拷贝。为你的用例调整代码。

在编辑Jinja2模板中使用变量referrals

render方法在以下路由中为每个视图调用:

'/'-即列表视图代码

'/new/'- code

'/edit/'- code

'/details/'- code

最新更新