flask-admin:美化 json 个字段
flask-admin: prettify json fields
我真的很喜欢 flask-admin 的 CRUD 功能。
不幸的是,我还没有找到使 json 数据库字段更具可读性的方法。
JSON 字段在列表视图(以及编辑视图)中显示为文本字符串。
任何人都可以告诉我从哪里开始美化列表视图(以及后来的编辑视图)吗?
您可以使用 column_formatters 自定义您的字段在列表视图中的外观:
import json
from flask_admin.contrib.sqla.view import ModelView
from jinja2 import Markup
def json_formatter(view, context, model, name):
value = getattr(model, name)
json_value = json.dumps(value, ensure_ascii=False, indent=2)
return Markup('<pre>{}</pre>'.format(json_value))
class MyView(ModelView):
column_formatters = {
'my_json_field': json_formatter,
}
或者您可以使用 column_type_formatters 将此样式应用于视图中的所有字典字段:
import json
from flask_admin.model import typefmt
from flask_admin.contrib.sqla.view import ModelView
from jinja2 import Markup
def json_formatter(view, value):
json_value = json.dumps(value, ensure_ascii=False, indent=2)
return Markup('<pre>{}</pre>'.format(json_value))
MY_FORMATTERS = typefmt.BASE_FORMATTERS.copy()
MY_FORMATTERS[dict] = json_formatter
class MyView(ModelView):
column_type_formatters = MY_FORMATTERS
在 Stack Overflow 上有 several other 的 flask_admin 格式器用法,但使用一个 JSON 格式器不会有什么坏处。
flask_admin.form.fields.JSONField
可以被覆盖以在输入中显示漂亮的值。 form_overrides 属性用于它:
from flask_admin.contrib.sqla.view import ModelView
from flask_admin.form import fields
class JSONField(fields.JSONField):
def _value(self):
if self.raw_data:
return self.raw_data[0]
elif self.data:
return json.dumps(self.data, ensure_ascii=False, indent=2)
else:
return ''
class MyView(ModelView):
form_overrides = {
'my_field': JSONField,
}
我真的很喜欢 flask-admin 的 CRUD 功能。 不幸的是,我还没有找到使 json 数据库字段更具可读性的方法。
JSON 字段在列表视图(以及编辑视图)中显示为文本字符串。
任何人都可以告诉我从哪里开始美化列表视图(以及后来的编辑视图)吗?
您可以使用 column_formatters 自定义您的字段在列表视图中的外观:
import json
from flask_admin.contrib.sqla.view import ModelView
from jinja2 import Markup
def json_formatter(view, context, model, name):
value = getattr(model, name)
json_value = json.dumps(value, ensure_ascii=False, indent=2)
return Markup('<pre>{}</pre>'.format(json_value))
class MyView(ModelView):
column_formatters = {
'my_json_field': json_formatter,
}
或者您可以使用 column_type_formatters 将此样式应用于视图中的所有字典字段:
import json
from flask_admin.model import typefmt
from flask_admin.contrib.sqla.view import ModelView
from jinja2 import Markup
def json_formatter(view, value):
json_value = json.dumps(value, ensure_ascii=False, indent=2)
return Markup('<pre>{}</pre>'.format(json_value))
MY_FORMATTERS = typefmt.BASE_FORMATTERS.copy()
MY_FORMATTERS[dict] = json_formatter
class MyView(ModelView):
column_type_formatters = MY_FORMATTERS
在 Stack Overflow 上有 several other
flask_admin.form.fields.JSONField
可以被覆盖以在输入中显示漂亮的值。 form_overrides 属性用于它:
from flask_admin.contrib.sqla.view import ModelView
from flask_admin.form import fields
class JSONField(fields.JSONField):
def _value(self):
if self.raw_data:
return self.raw_data[0]
elif self.data:
return json.dumps(self.data, ensure_ascii=False, indent=2)
else:
return ''
class MyView(ModelView):
form_overrides = {
'my_field': JSONField,
}