2013-06-18 9 views
20

別のモデルを参照するモデルFooがあり、その両方のUser-Flask-Adminビューがあるとします。他のモデルビューへのFlask-Adminハイパーリンクのビューをモデル化できますか?

Foo管理ビューページ(たとえば、http://mrjoes.github.io/2012/08/27/flask-admin-102.htmlの最初のスクリーンショットのようなもの)では、User列のエントリを対応するUserモデルビューにリンクしたいと思います。

Flask-Adminのテンプレートを修正する必要がありますか?このため

(これは単に与えられたフィールドのためのHTMLを出力し、DjangoのHTMLタグフィルタをバイパスするallow_tags(ref)真を設定することで、Djangoの管理インタフェースで可能である)

答えて

23

使用column_formattershttps://flask-admin.readthedocs.org/en/latest/api/mod_model/#flask.ext.admin.model.BaseModelView.column_formatters

アイデアはかなりあります単純:ハイパーリンクとして表示したいフィールドの場合は、HTML文字列を生成してJinja2 Markupクラスにラップするか(テンプレートでエスケープされないように)、macro

マクロヘルパーでは、プレゼンテーションロジックをテンプレートに移動する、上書きされたテンプレートでカスタムJinja2マクロを使用できます。

URLに関する限り、Userモデルに対して生成(または提供)されたエンドポイント名を見つけるだけで、リンクを生成するにはurl_for('userview.edit_view', id=model.id)を実行するだけです。

+1

大変感謝します。私にとって欠けていたリンクは、jinja2.Markupを使用していました。 – wodow

32

ジョーズの回答に基づいていくつかのサンプルコード:@wodowため

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 
    } 
+0

すばらしい例!私の場合は、外部リンクであったのでurl_forは必要ありませんでしたが、関係なくありました。 –

0

余分な情報、あなたがバックエンドとしてpymongo使用する場合pymongoでモデルが辞書型ですのでmodel.userは、間違っていることに気づく、あなたはそれを置き換えるためにmodel['name']を使用することができます

関連する問題