Flask-Admin:如何将数据库视图添加到不同的站点
Flask-Admin: how to add the database view to a different site
问题:如何将 flask-admin 视图(只有 table 包括 edit/delete 条目的可能性)添加到flask-admin 和管理路由?
我在
有一个页面
@app.route("/daten")
@login_required
def ansicht():
d = current_user.u_daten.order_by('date').all()
return render_template('ansicht.html',title='Ansicht der Daten', data = d)
呈现此模板。
{% extends "base.html" %}
{% block app_content %}
<h1>Ansicht der Daten</h1>
<table id="table_id" class="table-condensed table-striped table-hover table-responsive table-bordered">
<thead>
<th> Datum </th>
<th> Gewicht in Kg</th>
<th> Körperfett in Prozent</th>
</thead>
<tbody>
{% for element in data %}
<tr>
<td> {{ moment(element.date).format('L') }} </td>
<td align = "right"> {{ element.bw|float}} </td>
{% set bf = element.bf|float * 100 %}
<td align = "right"> {{'%0.1f' % bf }}</td>
</tr>
{% endfor %}
</tbody>
</table>
{% endblock %}
这按预期工作但是
- 我想将此 table 与 Flask 管理视图交换以包含编辑和删除功能。
- 我想使用 base.html 的导航栏,而不是 flask-admin
的 menue/navbar
我构建此视图是为了仅过滤来自当前用户的数据,以便登录用户可以编辑自己的数据。
class UserDaten(ModelView):
can_create = False
column_exclude_list = ('user_id')
column_default_sort = ('date', True)
column_labels = dict(date=u'Datum', bw=u'Körpergewicht in kg', bf=u'Körperfett in Prozent')
column_formatters = dict(bf=lambda v,c,m,p: m.bf*100, date=lambda v,c,m,p: m.date.strftime('%d.%m.%Y'))
form_args = dict(date=dict(label= u'Datum der Messung' , format='%d.%m.%Y',validators=[DataRequired()]))
form_excluded_columns = ('user_id')
form_choices = {'bf': [('0.232','23.2 %'),
('0.218','21.8 %'),
('0.202','20.2 %'),
('0.186','18.6 %'),
('0.168','16.8 %'),
('0.148','14.8 %'),
('0.127','12.7 %'),
('0.105','10.5 %'),
('0.081','8.1 %')]}
def get_query(self):
return self.session.query(self.model).filter(self.model.user_id == current_user.id)
def get_count_query(self):
return self.session.query(func.count('*')).filter(self.model.user_id == current_user.id)
admin.add_view(UserDaten(Daten, db.session))
与
admin.add_view(UserDaten(Daten, db.session))
我将此视图添加到
/admin/daten
基于我的 __init__.py 行
admin = Admin(app)
- 我现在想做的是禁用路由 /admin 和
- 在路由 /daten 中包含 flask-admin 视图
我可能必须更改模板以包含适当的 jinja 标签并将渲染函数添加到 class 但我似乎无法让它工作。
TL;DR
如何在另一个 flask 渲染页面中使用来自 flask-admin 的 "nice" table 视图和 edit/delete 函数?
为了将您的HTML风格与Flask-Admin提供的功能相结合,您可以自定义list.html
、edit.html
等Flask-Admin模板文件以满足您的需求
风格需要。使用 get_query
自定义显示在 table 中的数据。
要删除模型视图的 admin
部分 url,您可以在创建 Flask-Admin(admin = Admin(app, "Admin", url='/')
) 实例时设置 url
参数。并在将模型视图添加到 admin(admin.add_view(UserDaten(User, db.session, endpoint='daten'))
) 时设置 endpoint
参数。
问题:如何将 flask-admin 视图(只有 table 包括 edit/delete 条目的可能性)添加到flask-admin 和管理路由?
我在
有一个页面@app.route("/daten")
@login_required
def ansicht():
d = current_user.u_daten.order_by('date').all()
return render_template('ansicht.html',title='Ansicht der Daten', data = d)
呈现此模板。
{% extends "base.html" %}
{% block app_content %}
<h1>Ansicht der Daten</h1>
<table id="table_id" class="table-condensed table-striped table-hover table-responsive table-bordered">
<thead>
<th> Datum </th>
<th> Gewicht in Kg</th>
<th> Körperfett in Prozent</th>
</thead>
<tbody>
{% for element in data %}
<tr>
<td> {{ moment(element.date).format('L') }} </td>
<td align = "right"> {{ element.bw|float}} </td>
{% set bf = element.bf|float * 100 %}
<td align = "right"> {{'%0.1f' % bf }}</td>
</tr>
{% endfor %}
</tbody>
</table>
{% endblock %}
这按预期工作但是
- 我想将此 table 与 Flask 管理视图交换以包含编辑和删除功能。
- 我想使用 base.html 的导航栏,而不是 flask-admin 的 menue/navbar
我构建此视图是为了仅过滤来自当前用户的数据,以便登录用户可以编辑自己的数据。
class UserDaten(ModelView):
can_create = False
column_exclude_list = ('user_id')
column_default_sort = ('date', True)
column_labels = dict(date=u'Datum', bw=u'Körpergewicht in kg', bf=u'Körperfett in Prozent')
column_formatters = dict(bf=lambda v,c,m,p: m.bf*100, date=lambda v,c,m,p: m.date.strftime('%d.%m.%Y'))
form_args = dict(date=dict(label= u'Datum der Messung' , format='%d.%m.%Y',validators=[DataRequired()]))
form_excluded_columns = ('user_id')
form_choices = {'bf': [('0.232','23.2 %'),
('0.218','21.8 %'),
('0.202','20.2 %'),
('0.186','18.6 %'),
('0.168','16.8 %'),
('0.148','14.8 %'),
('0.127','12.7 %'),
('0.105','10.5 %'),
('0.081','8.1 %')]}
def get_query(self):
return self.session.query(self.model).filter(self.model.user_id == current_user.id)
def get_count_query(self):
return self.session.query(func.count('*')).filter(self.model.user_id == current_user.id)
admin.add_view(UserDaten(Daten, db.session))
与
admin.add_view(UserDaten(Daten, db.session))
我将此视图添加到
/admin/daten
基于我的 __init__.py 行
admin = Admin(app)
- 我现在想做的是禁用路由 /admin 和
- 在路由 /daten 中包含 flask-admin 视图
我可能必须更改模板以包含适当的 jinja 标签并将渲染函数添加到 class 但我似乎无法让它工作。
TL;DR 如何在另一个 flask 渲染页面中使用来自 flask-admin 的 "nice" table 视图和 edit/delete 函数?
为了将您的HTML风格与Flask-Admin提供的功能相结合,您可以自定义list.html
、edit.html
等Flask-Admin模板文件以满足您的需求
风格需要。使用 get_query
自定义显示在 table 中的数据。
要删除模型视图的 admin
部分 url,您可以在创建 Flask-Admin(admin = Admin(app, "Admin", url='/')
) 实例时设置 url
参数。并在将模型视图添加到 admin(admin.add_view(UserDaten(User, db.session, endpoint='daten'))
) 时设置 endpoint
参数。