Django >= 3.1 支持新的JSONField模型字段。我正在使用这样的一个:
from django.db import models
class Example(models.Model):
foobar = models.JSONField()
Run Code Online (Sandbox Code Playgroud)
我还将此模型包含在 Django 的管理部分中。然而,该字段只是一个包含 JSON 的简单文本区域,打印得并不漂亮。
我怎样才能确保 Django 管理部分中显示的 JSON 打印得很好,带有缩进,如下所示:
{
"example": {
"a": 1,
"b": 2
}
}
Run Code Online (Sandbox Code Playgroud)
小智 9
这是一种无需额外第三方包即可缩进 JSON 字段的方法:
import json
from django import forms
from django.contrib import admin
class PrettyJSONEncoder(json.JSONEncoder):
def __init__(self, *args, indent, sort_keys, **kwargs):
super().__init__(*args, indent=2, sort_keys=True, **kwargs)
class MyModelForm(forms.ModelForm):
json_field = forms.JSONField(encoder=PrettyJSONEncoder)
class MyModelAdmin(admin.ModelAdmin):
form = MyModelForm
Run Code Online (Sandbox Code Playgroud)
小智 4
我一直在寻找同样的东西并找到了这篇文章,其中他们使用pygments 模块: https: //daniel.feldroy.com/posts/pretty-formatting-json-django-admin
import json
from django.contrib import admin
from pygments import highlight
from pygments.lexers import JsonLexer
from pygments.formatters import HtmlFormatter
from django.utils.safestring import mark_safe
class YourModelAdmin(admin.ModelAdmin):
def pretty_json(self, instance):
"""Function to display pretty version of our data"""
# Convert the data to sorted, indented JSON
response = json.dumps(instance.metadata, sort_keys=True, indent=2) # <-- your field here
# Truncate the data. Alter as needed
response = response[:5000]
# Get the Pygments formatter
formatter = HtmlFormatter(style='colorful')
# Highlight the data
response = highlight(response, JsonLexer(), formatter)
# Get the stylesheet
style = "<style>" + formatter.get_style_defs() + "</style><br>"
# Safe the output
return mark_safe(style + response)
pretty_json.short_description = 'Pretty json'
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5082 次 |
| 最近记录: |