Форматировщики столбцов в интерфейсе администратора Flask

Привет, я создал интерфейс администратора Flask. В одном из полей (столбца) я хотел бы включить гиперссылку.

class workout(db.Model):
    equipment = db.Column(db.String(100))
    place = db.Column(db.String(100))
    image = db.Column(db.Text)

или используя макрос Jinja2 в шаблоне:

Мне нужно создать представление, которое должно включать указанные выше столбцы, а также отформатировать столбец изображения в представлении.

Я действительно не уверен, как создать представление для вышеупомянутой пользовательской модели класса.

from flask_admin.model.template import macro

class WorkoutView(ModelView):

в файле _macros.html.

{% macro render_image() %}
<a href="#" id="upload_widget_opener">Upload images</a>
<script src="https://widget.cloudinary.com/global/all.js" type="text/javascript"></script>  

<script type="text/javascript">  
  document.getElementById("upload_widget_opener").addEventListener("click", function() {
    cloudinary.openUploadWidget({ cloud_name: 'mycloudname', sources: [ 'local', 'url', 'camera', 'image_search', 
                 'facebook', 'dropbox', 'google_photos' ], upload_preset: 'myuploadpreset'}, 
      function(error, result) { console.log(error, result) });
  }, false);
</script>

{% endmacro %}

ЕСЛИ я запускаю файл _macros.html, это хорошо, и я получаю гиперссылку, как и ожидалось. Проблема: я не получаю гиперссылку в отформатированном столбце, когда пытаюсь импортировать макросы из файла _macros.html

Есть ли проблема с моим синтаксисом в _macros.html или в файле app.py?


person Kathiravan Natarajan    schedule 28.07.2017    source источник
comment
пожалуйста, укажите, в чем проблема   -  person SumanKalyan    schedule 28.07.2017
comment
Почему MyModelView наследуется от db?   -  person stamaimer    schedule 28.07.2017
comment
@SumanKalyan: я не получаю гиперссылку в столбце изображения   -  person Kathiravan Natarajan    schedule 28.07.2017
comment
@stamaimer: БД связана с postgresql [sqlalchemy]   -  person Kathiravan Natarajan    schedule 28.07.2017
comment
Вы хотите загрузить изображение на страницу списка или отредактировать и создать страницу Flask-Admin? А что вам облачность возвращает?   -  person stamaimer    schedule 29.07.2017
comment
Я хочу загружать изображения по гиперссылке столбца в администраторе Flask (представление администратора), а cloudinary возвращает виджет для загрузки изображений   -  person Kathiravan Natarajan    schedule 30.07.2017


Ответы (1)


Я думаю, что вы неправильно используете SQLAlchemy и Flask-Admin. Класс CustomModel наследуется от db.Model от SQLAlchemy, а класс CustomModelView наследуется от ModelView от Flask-Admin, чтобы управлять поведением этой модели в Flask-Admin. Вы можете достичь своей цели следующим образом:

Используйте form_widget_args, чтобы добавить атрибут id в поле формы;

Наследуйте create.html и edit.html, чтобы добавить javascript.

class ExampleModelView(ModelView):

    # ...

    edit_template = "admin/edit.html"
    create_template = "admin/create.html"

    form_widget_args = {
        "image": {
            "id": "cloudinary"
        }
    }

    # ...

# template inherit. "edit.html" is same as "create.html" except the first line.

{% extends "admin/model/create.html" %}
{% block tail %}
    {{ super() }}
    <script src="https://widget.cloudinary.com/global/all.js" type="text/javascript"></script>
    <script type="text/javascript">
        # js code to upload image and return response
    </script>
{% endblock %}
person stamaimer    schedule 29.07.2017
comment
Я немного не понимаю приведенный выше код. class ExampleModelView(ModelView): # ... ЕСЛИ я создаю такое CustomModelview, как я могу использовать CustomClassModel, на котором я должен создать представление? Как определить, что только один столбец в представлении должен быть отформатирован? Как использовать файл create.html, который вы показали выше, для отображения изменений в представлении? - person Kathiravan Natarajan; 31.07.2017
comment
Сначала код в ответе форматирует только поле image и оставляет левые поля без изменений. И для второго комментария: вы можете сначала создать экземпляр Flask-Admin и вызвать для него метод add_view: admin.add_view(ExampleModelView(ExampleModel, db.session)). Для файла шаблона вы можете создать каталог с именем admin в каталоге шаблонов и поместить в него унаследованные create.html и edit.html. - person stamaimer; 31.07.2017
comment
@KathiravanNatarajan Хорошо - person stamaimer; 31.07.2017