2013-06-18 56 views
20

假設我們有一個模型Foo引用了另一個模型User和Flask-Admin視圖。可以將Flask-Admin超級鏈接中的視圖模型化爲其他模型視圖?

在Foo管理員視圖頁面(例如類似http://mrjoes.github.io/2012/08/27/flask-admin-102.html的第一個屏幕截圖),我希望用戶列中的條目鏈接到相應的用戶模型視圖。

我需要修改一個Flask-Admin的模板來達到這個目的嗎?

(這是可能的Django管理界面,只需在指定字段輸出HTML和設置allow_tags(ref)真繞過Django的HTML標記過濾器)

回答

23

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

想法是很簡單:對於要顯示爲超鏈接的字段,請生成一個HTML字符串並用Jinja2 Markup類(因此它不會在模板中轉義)或使用macro幫助程序包裝它:https://github.com/mrjoes/flask-admin/blob/master/flask_admin/model/template.py

宏助手允許您在重寫模板中使用自定義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

額外的信息,發現model.user是錯的,如果你使用pymongo作爲後端,因爲在pymongo模型是一個字典類型,可以用model['name']代替它

相關問題