Подтвердить что ты не робот

Шаблоны Django - разделение строки на массив

У меня есть поле модели, в котором хранится список URL-адресов (да, я знаю, это неправильно) как url1\nurl2\nurl3<...>. Мне нужно разделить поле на массив в моем шаблоне, поэтому я создал настраиваемый фильтр:

@register.filter(name='split')
def split(value, arg):
    return value.split(arg)

Я использую его следующим образом:

{% with game.screenshots|split:"\n" as screens %}
        {% for screen in screens %}
            {{ screen }}<br>
        {% endfor %}
    {% endwith %}

но, как я вижу, split не хочет работать: я получаю вывод как url1 url2 url3 (с разрывами строк, если я смотрю на источник). Почему?

4b9b3361

Ответ 1

Django намеренно не учитывает многие типы templatetags, чтобы препятствовать тому, чтобы вы делали слишком много обработки в шаблоне. (К сожалению, люди обычно просто добавляют эти типы templatetags сами.)

Это прекрасный пример того, что должно быть в вашей модели, а не в вашем шаблоне.

class Game(models.Model):
    ...
    def screenshots_as_list(self):
        return self.screenshots.split('\n')

Затем в вашем шаблоне вы просто выполните:

{% for screen in game.screenshots_as_list %}
    {{ screen }}<br>
{% endfor %}

Гораздо понятнее и намного легче работать.

Ответ 3

Hm, я частично решил эту проблему. Я изменил свой фильтр на:

@register.filter(name='split')
def split(value, arg):
    return value.split('\n')

Почему это не сработало с исходным кодом?