Django 数组或列表输出?

6 投票
1 回答
31282 浏览
提问于 2025-04-15 19:39

我正在获取一组图片的链接和它们各自的标题。我尝试创建一个哈希表或者关联数组,但数据似乎被覆盖了,所以我最后只得到数组中的最后一个项目。

举个例子:

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

你想要的是一个字典,这是Python中的一种关联数据结构,而你现在创建的是一个列表。

不过我不太明白你的问题。为什么不直接把你的media集合传到模板里,然后像这样循环处理呢:

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

编辑

根据你的评论,我现在猜测你想要的是这样的:

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))

撰写回答