如何解决将其他对象/数据传递到 Flask Admin 模型视图编辑模板
我正在扩展 ModelView 的编辑模板,以便我可以显示数据库中的一些其他信息,这些信息与确定如何在此视图中编辑记录相关。我知道如何扩展模板并使其工作,但我不知道如何查询对象并在模板中使用它。
此外,我需要使用模型/记录中的值来查询我需要传递的新对象。
这是我在 init.py 中的代码:
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'))
然后从里程碑_edit.html,我想要这样的工作:
{% extends 'admin/model/edit.html' %}
{% block body %}
{{ super() }}
{% for r in referrals %}
<p>{{ r.name }}</p>
{% endif %}
{% endblock %}
当然,在模板中不能使用引用对象。如何自定义此 ModelView 以便从 init 文件中传递此对象?我已经在这里查看了有关此主题(ish)的可用帖子,但还没有找到答案。提前致谢。
解决方法
覆盖视图的 render
方法 see code on 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
code 中代码的直接副本。根据您的用例调整代码。
在您的编辑 Jinja2 模板中使用变量 referrals
。
在每个视图的以下路由中调用 render
方法:
'/'
- 即列表视图 code
'/new/'
- code
'/edit/'
- code
'/details/'
- code
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。