【问题标题】:Accessing list in request.getrequest.get 中的访问列表
【发布时间】:2019-02-14 14:33:38
【问题描述】:

我在检查 Django 模板中的 request.GET 参数时遇到了困难。

django.template.context_processors.request 已启用,因此我可以访问request.GET。

在我的 URL 中使用以下 GET 参数:?floor=1&floor=2&building=1,我正在尝试执行以下操作:

{% if 1 in request.GET.floor %}IN{% else %}OUT{% endif %}

我希望这会返回 IN。但是会显示OUT。

更详细地潜水时:

{{ request.GET }}
{{ request.GET.floor }}
{{ request.GET.urlencode }}

返回如下:

<QueryDict: {'building': ['1'], 'floor': [1, 2]}>
2
building=1&floor=1&floor=2

所以看起来我的“地板”[1, 2] 列表已减少到最后一个元素(“2”)。 查看完整列表的最佳方法是什么?

【问题讨论】:

  • 使用request.GET.getlist('floor')。另请参阅stackoverflow.com/questions/11190070/django-getlist。
  • @Bobort:在视图中,有什么方法可以直接在模板中访问?我当然可以将getlist('whatever') 传递给上下文,但我有十几个这样的项目。
  • 哦,我明白了。您可以创建一个名为getlist 的模板标签/过滤器,它将键作为参数。您当前的设置不使用与获取列表相关的任何内容。

标签: django django-templates


【解决方案1】:

创建一个过滤器。

templatetags/getlist.py

from django import template

register = template.Library()

@register.filter(name="getlist")
def getlist(request_dictionary, key):
    return request_dictionary.getlist(key) if request_dictionary else []

在您的模板中:

{% load getlist %}
{% if 1 in request.GET|getlist:'floor' %}IN{% else %}OUT{% endif %}

【讨论】:

  • 感谢 SaeX 的编辑!我很高兴你能够让它工作!
猜你喜欢
  • 2013-12-21
  • 2016-06-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-12
  • 1970-01-01
  • 2020-04-21
相关资源
最近更新 更多