2010-02-24 23 views
5

Wyciągam zestaw adresów URL obrazów i odpowiadające im tytuły. Próbowałem już utworzyć tablicę asocjacyjną lub asocjacyjną, ale dane wydają się nadpisywać, więc kończę tylko na ostatnim elemencie tablicy.Dane wyjściowe tablicy lub listy Django?

Na przykład;

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

Próbowałem nawet utworzyć dwie listy i umieścić je w większej.

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

Próbuję utworzyć łącze Spośród tych danych:

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

ciśgle blisko, ale kończy się zapętlenie nad zbyt dużo danych lub wszystkich danych na raz w moim szablon django.

Pomysły?

Edytuj: Być może zip() jest tym, czego potrzebuję?

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) 

Odpowiedz

5

Chcesz dict, która jest łączne strukturę danych Pythona, podczas gdy tworzysz listę.

Ale nie jestem pewien, czy rozumiem twój problem. Dlaczego nie po prostu przekazać swoją kolekcję media do szablonu i iteracyjne tak:

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

EDIT

Bazując na swoim komentarzu, teraz zakładają szukasz czegoś takiego:

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

Możesz utworzyć listę, a następnie dla każdego pliku dołączyć słownik do tej listy po przetworzeniu adresu URL, tytułu lub cokolwiek innego.

Albo, można tworzyć własne klasy, która zamyka to trochę lepiej w przypadku gdy masz inną logikę zastosować:

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

Hi Joe - muszę zrobić łańcuch wymienić na URL, a także nie wyjście wszelkie obrazy, które nie mają tytułu. Więc mogę to zrobić tylko po stronie Pythona, prawda? – Shu

+0

UGH! Powinienem to zobaczyć wcześniej. Dziękuję bardzo! Czy ta klasa FileInfo musi zwrócić wszystko, czy mogę ją nazwać taką jaka jest? na przykład.; return self; – Shu

+0

Metoda '__init__' jest konstruktorem Pythona, który nie musi zwracać niczego, ponieważ jego wartość powrotna jest domniemana jako nowy obiekt. 'file_info = FileInfo (...)' –

Powiązane problemy