如何防止 Django ModelAdmin 去除空格?
How to prevent Django ModelAdmin from stripping whitespaces?
所以我在 Django ModelAdmin 中定义了 readonly_fields,其中包含一个如下所示的可调用对象:
class TestAdmin(admin.ModelAdmin):
readonly_fields = ("test_field_with_whitespace",)
def test_field_with_whitespace(self, obj):
return ' Hello World'
在相应的管理视图中,只读字段显示为 "Hello World" - 因此没有空格。
如何显示空格?
这与modeladmin无关。 HTML 本身会去除所有空格。如果您需要它准确显示,那么您需要将其包装在 <pre>
标记中 - 由于您现在发送 HTML 您需要将其标记为安全以避免自动转义。
from django.utils.safestring import mark_safe
...
return mark_safe('<pre> Hello World</pre>')
已接受的答案容易受到 js 注入攻击。
为了不易受到 js 注入攻击,最好将自定义 css 添加到管理模型。实现这一目标的一种方法是:
@admin.register(MyModel)
class SomeAdmin(admin.ModelAdmin):
class Media:
css = {
'all': ('css/admin.css',),
}
admin.css 文件:
div.readonly {
white-space: pre;
}
所以我在 Django ModelAdmin 中定义了 readonly_fields,其中包含一个如下所示的可调用对象:
class TestAdmin(admin.ModelAdmin):
readonly_fields = ("test_field_with_whitespace",)
def test_field_with_whitespace(self, obj):
return ' Hello World'
在相应的管理视图中,只读字段显示为 "Hello World" - 因此没有空格。
如何显示空格?
这与modeladmin无关。 HTML 本身会去除所有空格。如果您需要它准确显示,那么您需要将其包装在 <pre>
标记中 - 由于您现在发送 HTML 您需要将其标记为安全以避免自动转义。
from django.utils.safestring import mark_safe
...
return mark_safe('<pre> Hello World</pre>')
已接受的答案容易受到 js 注入攻击。
为了不易受到 js 注入攻击,最好将自定义 css 添加到管理模型。实现这一目标的一种方法是:
@admin.register(MyModel)
class SomeAdmin(admin.ModelAdmin):
class Media:
css = {
'all': ('css/admin.css',),
}
admin.css 文件:
div.readonly {
white-space: pre;
}