Как предотвратить 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;
}
Другие вопросы по тегам