【问题标题】:Flask-Admin: how to add the database view to a different siteFlask-Admin:如何将数据库视图添加到不同的站点
【发布时间】:2018-04-23 14:59:55
【问题描述】:

问题:如何将 flask-admin 视图(仅包含编辑/删除条目可能性的表格)添加到 flask-admin 和 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 %}

这按预期工作,但是

  • 我想将此表与 Flask 管理视图交换以包含编辑和删除功能。
  • 我想使用 base.html 中的导航栏,而不是 flask-admin 中的菜单/导航栏

我已构建此视图以仅过滤来自当前用户的数据,以便登录用户可以编辑自己的数据。

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 标记并将渲染函数添加到类中,但我似乎无法让它工作。

TL;DR 如何使用 flask-admin 中的“漂亮”表格视图并在另一个烧瓶渲染页面中编辑/删除功能?

【问题讨论】:

    标签: flask flask-admin


    【解决方案1】:

    要将您的HTML风格与Flask-Admin提供的功能结合起来,您可以自定义Flask-Admin的list.htmledit.html等模板文件以满足您的需求 风格需求。使用get_query 自定义要在表格中显示的数据。

    要删除模型视图 url 的 admin 部分,您可以在创建 Flask-Admin 实例时设置 url 参数(admin = Admin(app, "Admin", url='/'))。并在将modelview添加到admin(admin.add_view(UserDaten(User, db.session, endpoint='daten')))时设置endpoint参数。

    【讨论】:

    • 感谢您的回答,经过多次试验,我能够重定向基本模板,现在有一个包含烧瓶管理功能的表格
    猜你喜欢
    • 2021-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-15
    • 1970-01-01
    • 2012-01-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多