Django:如何从模板中的QueryDict获取数组?

时间:2010-02-02 20:03:04

标签: django arrays templates

我的request.session中有以下QueryDict对象。

<QueryDict: {u'category': [u'44', u'46'], u'cityID': [u'null'], u'countryCode': [u''], u'mapCenterLng': [u'2.291300800000009'], u'mapZoom': [u'12'], u'mapCenterLat': [u'47.10983460000001'], u'price_range': [u''], u'textbox': [u'']}>

在模板中尝试使用以下方法获取类别数组:

{{request.session.lastrequest.category}}

但是这只给出了数组的最后一个值。 我怎样才能得到整个阵列?

由于

3 个答案:

答案 0 :(得分:19)

你做不到。您需要调用.getlist('category'),但不能使用模板中的参数调用方法。

答案 1 :(得分:0)

我也需要访问QueryDict,所以我添加了一个过滤器,它可以满足我的需求。

无论您在何处注册了应用过滤器:

#/templatetags/app_filters.py
from django import template
register = template.Library()

# Calls .getlist() on a querydict
# Use: querydict | get_list {{ querydict|get_list:"itemToGet" }}
@register.filter
def get_list(querydict, itemToGet ):

    return querydict.getlist(itemToGet)

在模板中:

{% load app_filters %}

{% for each in form.data|get_list:"itemYouAreInterestedIn" %}
     {{each}}
{% endfor %}

答案 2 :(得分:0)

您可以使用QueryDict的方法lists()来做到这一点:

{% for k, v in request.session.lastrequest.lists %}{% if k == 'category' %}{{ v }}{% endif %}{% endfor %}

尽管您需要遍历整个字典,但它只会输入一次if语句。 v始终是列表。