繁体   English   中英

可以在Flask-Admin超链接中将视图建模到其他模型视图吗?

[英]Can model views in Flask-Admin hyperlink to other model views?

假设我们有一个模型,Foo,它引用了另一个模型,User - 和Flask-Admin视图。

在Foo管理员视图页面上(例如http://mrjoes.github.io/2012/08/27/flask-admin-102.html上的第一个屏幕截图),我希望用户列中的条目是链接到相应的用户模型视图。

我是否需要修改Flask-Admin的模板之一才能实现此目的?

(这可以在Django管理界面中通过简单地输出给定字段的HTML并设置allow_tags (ref) True来绕过Django的HTML标记过滤器)

一些基于Joes答案的示例代码:

class MyFooView(ModelView):

    def _user_formatter(view, context, model, name):
        return Markup(
            u"<a href='%s'>%s</a>" % (
                url_for('user.edit_view', id=model.user.id),
                model.user
            )
        ) if model.user else u""

    column_formatters = {
        'user': _user_formatter
    }

使用column_formattershttpscolumn_formatters

想法非常简单:对于要显示为超链接的字段,要么生成HTML字符串并使用Jinja2 Markup类包装它(因此不会在模板中进行转义)或使用macro助手: https:// github。 COM / mrjoes /烧瓶管理员/斑点/主/ flask_admin /模型/ template.py

宏助手允许您在覆盖模板中使用自定义Jinja2宏,这将表示逻辑移动到模板。

就URL而言,您只需找到为User模型生成(或提供)的端点名称,并执行url_for('userview.edit_view', id=model.id)以生成链接。

@wodow的额外信息,请注意如果你使用pymongo作为后端, model.user是错误的,因为pymongo中的模型是一个dict类型,你可以使用model['name']替换它

将此代码添加到其他模型和flask-admin和jinja引用的每个模型中,将处理您想要在屏幕上显示的名称,只需将其替换为您喜欢的名称:

def __unicode__(self):
    return self.name  # or self.id or whatever you prefer

例如:

class Role(db.Document, RoleMixin):
    name = db.StringField(max_length=80, unique=True)
    description = db.StringField(max_length=255)

    def __unicode__(self):
        return self.name

class MasterUser(db.Document, UserMixin):
    email = db.StringField(max_length=255)
    password = db.StringField(max_length=255)
    active = db.BooleanField(default=True)
    confirmed_at = db.DateTimeField()
    roles = db.ListField(db.ReferenceField(Role), default=[])

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM