2016-06-10 6 views
0

Ich versuche, diesen Flask-admin-Beispielcode http://examples.flask-admin.org/forms/admin/image/ so zu ändern, dass sowohl das Miniaturbild des Bildes als auch der Rohtext des Dateipfads als zwei separate Spalten angezeigt werden. Dies ist im Grunde das gleiche Problem, das ich versuche, auf meinem eigenen Projekt zu lösen. Ich kann es nur einen von ihnen anzeigen lassen, aber nicht beide gleichzeitig.Flask-admin - mehrere Formate derselben Spalte in ModelView

Die entsprechende Klasse im Codebeispiel Quelle:

class ImageView(sqla.ModelView): 
    def _list_thumbnail(view, context, model, name): 
     if not model.path: 
      return '' 

     return Markup('<img src="%s">' % url_for('static',             filename=form.thumbgen_filename(model.path))) 

    column_formatters = { 
     'path': _list_thumbnail 
    } 

Mein Problem ist, dass die Modelview-Klasse Spalten enthält durch Bezugnahme auf sie mit ihrem Namen in der SQAlchemy Modell (zB ‚Name‘ oder ‚Pfad anzeigen '). Wenn ich möchte, dass es sowohl den Pfad als auch das Thumbnail hat, muss ich die Spalte "Pfad" zweimal einfügen. Allerdings kann ich nicht auf jede der 'Pfad'-Spalten verschiedene Formatierungsfunktionen anwenden. So kann ich nur zwei Miniaturbildspalten oder zwei Textpfadspalten haben.

Ich versuchte es zu betrügen, indem Sie die zwei 'Pfad' Spalten unterschiedlich mit column_labels, aber dies ist ein Wörterbuch-Objekt nicht eine Liste, so wieder können Sie nicht zwischen den beiden unterscheiden.

(vollständige Quelle hier: https://github.com/flask-admin/flask-admin/blob/master/examples/forms/app.py)

Antwort

1

Sie sind in der Nähe. Definieren Sie eine "Dummy" -Spalte in der column_list -Eigenschaft der Ansicht, geben Sie ihr ein schönes Label über die column_label-Eigenschaft, und jetzt können Sie die "dummy" -Spalte in der column_formatters-Eigenschaft verwenden.

Zum Beispiel:

class ImageView(sqla.ModelView): 

    # Add all your visible columns here include a "dummy" column - in this instance 'raw_path' 
    column_list = ('path', 'raw_path') 

    # Define label for dummy column 
    column_labels = { 
     'raw_path': 'Full Path'  
    } 

    def _list_thumbnail(view, context, model, name): 
     if not model.path: 
      return '' 
     return Markup('<img src="%s">' % url_for('static', filename=form.thumbgen_filename(model.path))) 

    def _list_raw_path(view, context, model, name): 
     if not model.path: 
      return '' 
     return Markup('<p>{path}</p>'.format(path=model.path)) 


    column_formatters = { 
     'path': _list_thumbnail 
     'raw_path': _list_raw_path 
    } 
Verwandte Themen