2010-02-24 9 views
5

Estoy tirando de un conjunto de URL de imagen y sus respectivos títulos. Intenté crear un hash o una matriz asociativa, pero los datos parecen sobrescribirse, por lo que solo termino con el último elemento de la matriz.matriz Django o lista de salida?

Por ejemplo;

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

Incluso he intentado crear dos listas y ponerlas en una más grande.

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

Estoy intentando crear un enlace de estos datos:

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

sigo recibiendo cerca, pero terminan bucle sobre demasiados datos o todos los datos a la vez en mi Plantilla django.

Ideas?

Editar: ¿Tal vez zip() es lo que necesito?

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) 

Respuesta

5

¿Quieres una dict, que es la estructura de datos asociativa de Python, mientras que se está creando una lista.

Pero no estoy seguro de entender su problema. ¿Por qué no sólo tiene que pasar su colección media en la plantilla y repetir así:

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

EDITAR

Basado en su comentario, ahora presumen que busca algo como esto:

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 %} 

Puede crear una lista, luego para cada archivo, agregar un diccionario a esa lista después de procesar la URL, el título o lo que sea.

O bien, puede crear su propia clase que encapsula esto un poco mejor en caso de tener otra lógica para aplicar:

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

Hola Joe - Necesito hacer una cadena sustituir en el URL y tampoco de salida cualquier imagen que no tenga un título. Entonces solo puedo hacer eso en el lado de Python, ¿correcto? – Shu

+0

UGH! Debería haber visto esto antes. ¡Muchas gracias! ¿Tiene esa clase FileInfo que devolver algo o puedo llamarlo tal cual? p.ej.; volverse a sí mismo; – Shu

+0

El método '__init__' es el constructor de Python, no necesita devolver nada, ya que implica que el valor devuelto es el nuevo objeto. 'file_info = FileInfo (...)' –

Cuestiones relacionadas