Flask 管理界面中的列格式化程序
Column formatters in Flask Admin interface
您好,我已经创建了一个 Flask 管理界面。在其中一个字段(列)中,我想包含一个超链接。
class workout(db.Model):
equipment = db.Column(db.String(100))
place = db.Column(db.String(100))
image = db.Column(db.Text)
或在模板中使用 Jinja2 宏:
我必须创建一个视图,其中应包括上述列,并且我必须在视图中设置图像列的格式。
我真的不太确定如何为上述自定义 class 模型创建视图。
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 文件中的语法有问题吗?
我认为你滥用了 SQLAlchemy 和 Flask-Admin。 CustomModel class 继承自 SQLAlchemy 的 db.Model 和 CustomModelView class 继承自 Flask-Admin 的 ModelView 以控制该模型在 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 %}
您好,我已经创建了一个 Flask 管理界面。在其中一个字段(列)中,我想包含一个超链接。
class workout(db.Model):
equipment = db.Column(db.String(100))
place = db.Column(db.String(100))
image = db.Column(db.Text)
或在模板中使用 Jinja2 宏:
我必须创建一个视图,其中应包括上述列,并且我必须在视图中设置图像列的格式。
我真的不太确定如何为上述自定义 class 模型创建视图。
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 文件中的语法有问题吗?
我认为你滥用了 SQLAlchemy 和 Flask-Admin。 CustomModel class 继承自 SQLAlchemy 的 db.Model 和 CustomModelView class 继承自 Flask-Admin 的 ModelView 以控制该模型在 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 %}