2015-07-29 4 views
2

У меня есть простая модель Call, и я использую Flask-Admin для создания/редактирования/удаления экземпляров этой модели.Пользовательский просмотр списка с Flask-Admin

Одним из полей вызова является путь к аудиофайлу. Я хотел бы иметь возможность воспроизвести файл в админе, добавив некоторый код html. Я проверил шаблон flask_admin/templates/bootstrap3/admin/model/list.html, и кажется, что единственный способ сделать то, что я хочу, - добавить ячейку в конце строки, что означает расширение list.html, копирование всего блока list_row и добавление моей ячейки.

Это единственный способ? Или есть способ добавить «поддельное» поле с моим аудиоплеером (в основном html5) в форму?

flask_admin/шаблоны/bootstrap3/администратор/модель/list.html

.... 

{% for c, name in list_columns %} 
    <td class="col-{{c}}"> 
    {% if admin_view.is_editable(c) %} 
     {% if form.csrf_token %} 
      {{ form[c](pk=get_pk_value(row), value=get_value(row, c), csrf=form.csrf_token._value()) }} 
     {% else %} 
      {{ form[c](pk=get_pk_value(row), value=get_value(row, c)) }} 
     {% endif %} 
    {% else %} 
     {{ get_value(row, c) }} 
    {% endif %} 
    </td> 
{% endfor %} 
<td>ADD MY CUSTOM CELL HERE?</td> 
.... 

models.py

class Call(db.Model): 
    __tablename__ = 'calls' 
    id = db.Column(db.Integer, primary_key=True) 
    name = db.Column(db.Unicode(64)) 
    path = db.Column(db.Unicode(128)) 

    def __unicode__(self): 
     return self.name 

ответ

3

Там более простой способ с помощью column_formatters:

class CallView(sqla.ModelView): 
    def _mp3_formatter(view, context, model, name): 
     return Markup('<a href="{}">{}</a>'.format(url_for('path_to_mp3_view', filename=model.path), model.name) 
    column_formatters = { 
     'path': _mp3_formatter 
    } 

O г вы можете даже передать макрос jinja2 (который должен присутствовать в наиважнейшей шаблоне):

class CallView(sqla.ModelView): 
    column_formatters = dict(path=macro('render_path_mp3')) 

И в шаблоне:

{% macro render_path_mp3(model, column) %} 
    <a href="{{ url_for('path_to_mp3_view', filename=model.path) }}">{{ model.name }}</a> 
{% endmacro %} 

Создание пользовательской функции просмотра path_to_mp3_view опущенная как exercise ..;)

+0

Отлично, спасибо. Однако я буду использовать тег 'audio' html 5. – jul