2009-10-29 3 views
2

Я пытаюсь перебрать словарь, в частности, свойство метаобъекта запроса. Это словарь, но следующий код обрабатывает его, как список строк. Как я могу сделать это правильно?Django Template For Loop Over request.META Dictionary

EDIT: Я нашел, что если я заменил request.META на request.META.items, это сработает, но почему следующее не работает? Разве это не дикт?

{% for a, b in request.META %} 
    {{ a }}: {{ b }} 
{% endfor %} 

Урожайность (это укороченные для краткости):

G: D 
w: s 
R: U 
H: T 
G: N 
... 
L: S 
R: E 
H: T 
P: A 

Принимая во внимание:

{{request.META}} 

Урожайность:

{'GDM_KEYBOARD_LAYOUT': 'us', 
'wsgi.multiprocess': False, 
'RUN_MAIN': 'true', 
'HTTP_COOKIE': 'sessionid=... 
... 
...6:*.spx=00;36:*.xspf=00;36:', 
'REMOTE_HOST': '', 
'HTTP_ACCEPT_ENCODING': 'gzip,deflate', 
'PATH_INFO': u'/'} 

ответ

3

Ну, это довольно просто.

request.META - словарь, не так ли? Так что, если вы делаете цикл for dict, вы получаете его ключи. Это то, что вы получаете. И поскольку ключи являются строками (в вашем примере) и строки могут быть распакованы, их первый и второй элементы (символы) распаковываются в a и b.

Метод словаря items, однако, дает список 2-х кортежей, каждый из этих кортежей распаковывается в a и b соответственно. Таким образом, он «работает», как вы говорите.

+0

Правильно, потому что я не могу сделать {% для (a, b) в запросе.META%} с круглой скобкой. Благодарю. – kzh

7

Замена request.META с request.META. предметов.