Как предотвратить Django ModelAdmin для удаления пробелов?
Поэтому я определил readonly_fields в Django ModelAdmin с помощью функции, которая выглядит следующим образом:
class TestAdmin(admin.ModelAdmin):
readonly_fields = ("test_field_with_whitespace",)
def test_field_with_whitespace(self, obj):
return ' Hello World'
В соответствующем административном окне поле только для чтения отображается как "Hello World" - без пробелов.
Что я могу сделать, чтобы показать пробелы?
2 ответа
Решение
Это не имеет ничего общего с 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;
}