Как я могу отличить списки от строк в шаблонах Django - PullRequest
1 голос
/ 23 октября 2010

Я занимаюсь разработкой проекта в Google AppEngine с использованием шаблонов Django, поэтому мне приходится использовать теги типа {{ aitem.Author }} для печати содержимого в моем HTML-шаблоне.

Однако

Author может быть строкой или списком объекта, и я не могу сказать об этом заранее. Когда Автор является списком, и я пытаюсь напечатать его на своем шаблоне, я получаю ужасный результат

Автор: [u'J. К. Роулинг, У'Мэри ГрандПр \ xe9 ']

Есть ли способ эффективно обработать такой сценарий (в основном печать поля по-разному в зависимости от его типа)? Нужно ли полагаться на пользовательские теги или любые другие средства?

Ответы [ 3 ]

6 голосов
/ 23 октября 2010

Я думаю, что самым чистым решением было бы добавить метод к модели get_authors(), который всегда возвращает список одного или нескольких авторов. Тогда вы можете использовать:

Author: {{ aitem.get_authors|join:", " }}

Если у вас по какой-то причине есть доступ только к шаблонам и вы не можете изменить модель, тогда вы можете использовать хак, подобный этому:

{% if "[" == aitem.Author|pprint|slice:":1" %}
    Author: {{ aitem.Author|join:", " }}
{% else %}
    Author: {{ aitem.Author }}
{% endif %}

P.S. не рекомендуется использовать заглавные буквы в именах атрибутов.

1 голос
/ 23 октября 2010

Я думаю, что решение Aidas get_authors() является лучшим, но альтернативой может быть создание тега шаблона, который выполняет тест.Вам захочется прочитать пользовательских шаблонных тегов , но их не так сложно создать, если вы посмотрите на существующие.

0 голосов
/ 23 октября 2010

Я последовал совету Мэтью и в итоге внедрил фильтр для обработки списков. Я публикую это здесь на случай, если кому-то еще это понадобится.

@register.filter(name='fixlist')
def fixlist(author):
    if type(author) == list:
        return ', '.join(author)
    else:
        return author

Я звоню с шаблонных страниц вот так {{ aitem.Author|fixlist }}

Спасибо за помощь!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...