Массив Django или вывод списка? - PullRequest
5 голосов
/ 24 февраля 2010

Я вытягиваю набор URL-адресов изображений и соответствующих им заголовков. Я попытался создать хеш или ассоциативный массив, но данные, кажется, перезаписывают, поэтому я получаю только последний элемент в массиве.

Например;

thumbnail_list = []
for file in media:
    thumbnail_list['url'] = file.url
    thumbnail_list['title'] = file.title

Я даже пытался создать два списка и поместить их в один больший.

thumbnail_list.append('foo')
thumbnail_urls.append('bar')
all_thumbs = [thumbnail_list], [thumbnail_urls]

Я пытаюсь создать ссылку из этих данных:

<a href="image-url">image title</a>

Я продолжаю приближаться, но в итоге зацикливаюсь на слишком большом количестве данных или всех данных одновременно в моем шаблоне django.

Идеи

Редактировать: Может, мне нужен zip ()?

questions = ['name', 'quest', 'favorite color']
answers = ['lancelot', 'the holy grail', 'blue']
for q, a in zip(questions, answers):
    print 'What is your {0}?  It is {1}.'.format(q, a)

1 Ответ

5 голосов
/ 24 февраля 2010

Вам нужен dict , который является ассоциативной структурой данных Python, когда вы создаете список.

Но я не уверен, что понимаю вашу проблему. Почему бы просто не передать свою коллекцию media в шаблон и выполнить итерации следующим образом:

{% for file in media %}
    <a href="{{ file.url }}">{{ file.title }}</a>
{% endfor %}

EDIT

Исходя из вашего комментария, теперь я предполагаю, что вы ищете что-то вроде этого:

thumbnail_list = []
for file in media:
    file_info = {}
    file_info['url'] = file.url
    file_info['title'] = file.title
    thumbnail_list.append(file_info)

{% for file in thumbnail_list %}
    <a href="{{ file.url }}">{{ file.title }}</a>
{% endfor %}

Вы можете создать список, затем для каждого файла добавить словарь в этот список после обработки URL-адреса, заголовка или чего-либо еще.

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

class FileInfo(object):
    def __init__(self, file):
        self.url = file.url # do whatever
        self.title = file.title # do whatever

thumbnail_list = []
for file in media:
    thumbnail_list.append(FileInfo(file))
...