Как добавить больше места в метод `__str__` модели Django?

#python #django

#python #django

Вопрос:

Я хочу добавить больше пробелов в __str__ метод, но метод обрезает пробелы до 1.

Например:

 class Spam(models.Model):
    foo = models.IntegerField()
    bar = models.IntegerField()

    def __str__(self):
        return 'more spaces {}            {}!'.format(self.foo, self.bar)
 

Этот вывод в Django admin:
more spaces 1 2

Я хочу : more spaces 1 2

Как это сделать?

Комментарии:

1. Пробелы есть, но веб-браузеры просто отображают любые пробелы в HTML как один пробел.

2. Пробелы, скорее всего, не отображаются вашим браузером. Именно так это определяет стандарт HTML.

Ответ №1:

Где когда-либо находится ваш str:

 from django.utils import safestring

def __str__(self):
    string = safestring.mark_safe("more spaces {}" "amp;nbsp;"*10  "{}!".format(self.foo, self.bar))
    return string
 

Ответ №2:

Я не знаком с django, но вы действительно проверяете результаты на веб-странице.

Итак, полный ответ на ваш вопрос будет следующим: вы должны использовать специальные символы HTML для HTML-страницы, чтобы сделать отступ во второй части текста. Вы можете проверить специальные символы здесь: http://www.wikihow.com/Insert-Spaces-in-HTML

Чтобы использовать ‘amp; nbsp’, вы можете сделать:

 def __str__(self):
    space_sym = "amp;nbsp"*10 # hardcode magic-number of indent spaces
    return 'more spaces {}{}{}!'.format(self.foo, space_sym, self.bar)
 

Комментарии:

1. Это частичный ответ: Django экранируется по умолчанию, поэтому вам нужно будет добавить |safe тег шаблона в шаблон, чтобы эти пробелы не экранировались

Ответ №3:

Если вы используете метод печати, он печатает нормально.

Я думаю, у вас проблема с html? Замените пробелы на amp;nbsp; (но тогда это выглядит как дерьмо в оболочке) или попробуйте более явное представление в admin…

Или вы могли бы попробовать обернуть строку в <pre> тег