如何在Django中获取POST请求值列表?

问题描述 投票:0回答:5

假设我要传递的参数叫

printdata
printdata=['a', 'b', 'c']

我用

"input type="hidden" name="alist" value={{printdata}}>"
来通过 参数。但是,当我尝试检索参数时 使用以下代码的views.py:

params = request.POST

params["alist"]
等于
['a',
而不是
['a', 'b', 'c']
。我怀疑 django 使用
,
来标识参数的结尾。

您有什么建议或其他方法来传递参数吗?

python django post django-views django-templates
5个回答
8
投票

在 HTML 中使用多个隐藏字段,每个值一个:

<input type="hidden" name="alist" value="1" />
<input type="hidden" name="alist" value="2" />
<input type="hidden" name="alist" value="3" />

在服务器端,使用

request.POST.getlist
以列表形式读取所有值:

alist = request.POST.getlist('alist')
# 'alist' now contains ['1', '2', '3']

0
投票

确保在 HTML 中的列表字符串两边加上引号。即:

<input type="hidden" name="alist" value="{{printdata}}">

0
投票

使用

request.POST.getlist('alist')

获取值。


0
投票
alist = request.POST.get('alist')

0
投票

例如,如果您在

POST
中提交
index.html
请求值列表,如下所示:

{# "index.html" #}

<form action="{% url 'my_app1:test' %}" method="post">
  {% csrf_token %}
  <input type="text" name="fruits" value="apple" /></br>
  <input type="text" name="fruits" value="orange" /></br>
  <input type="submit" />
</form>

然后,您可以在

POST
中获取
my_app1/views.py
请求值列表,如下所示。 *根据我的实验,您无法在Django模板中正确获取
POST
请求值列表,并且我的答案解释了如何在Django中获取
POST
请求值:

# "my_app1/views.py"

from django.shortcuts import render

def test(request):

    print(request.POST.getlist('fruits')) # ['apple', 'orange']
    print(request.POST.getlist('meat')) # []
    print(request.POST.getlist('meat', "Doesn't exist")) # Doesn't exist
    print(request.POST._getlist('fruits')) # ['apple', 'orange']
    print(request.POST._getlist('meat')) # []
    print(request.POST._getlist('meat', "Doesn't exist")) # Doesn't exist
    print(list(request.POST.lists())) # [('csrfmiddlewaretoken', ['OE3hidxt0awKjRFXxUddvT6u0cRfhdMnsVGpsYWAhd0hMUabpY3vFp6xkCub9Jlb']), ('fruits', ['apple', 'orange'])]
    print(dict(request.POST)) # {'csrfmiddlewaretoken': ['OE3hidxt0awKjRFXxUddvT6u0cRfhdMnsVGpsYWAhd0hMUabpY3vFp6xkCub9Jlb'], 'fruits': ['apple', 'orange']}

    return render(request, 'index.html')

此外,如果您在

POST
中提交
index.html
请求值列表如下:

<form action="{% url 'my_app1:test' %}" method="post">
  {% csrf_token %}
  <input type="text" name="fruits" value="apple,orange" />
  <input type="submit" />
</form>

然后就可以在

POST
中获取
my_app1/views.py
请求值列表,如下图:

# "my_app1/views.py"

from django.shortcuts import render

def test(request):

    print(request.POST['fruits'].split(',')) # ['apple', 'orange']
    print(request.POST.getlist('fruits')[0].split(',')) # ['apple', 'orange']
    print(request.POST._getlist('fruits')[0].split(',')) # ['apple', 'orange']
    print(list(request.POST.values())[1].split(',')) # ['apple', 'orange']
    print(list(request.POST.items())[1][1].split(',')) # ['apple', 'orange']
    print(list(request.POST.lists())[1][1][0].split(',')) # ['apple', 'orange']
    print(request.POST.dict()['fruits'].split(',')) # ['apple', 'orange']
    print(dict(request.POST)['fruits'][0].split(',')) # ['apple', 'orange']

    return render(request, 'index.html')

然后就可以在

POST
中获取
test.html
请求值列表,如下图:

{# "test.html" #}

{{ request.POST.fruits }} {# apple,orange #}
{{ request.POST.dict }} {# {'csrfmiddlewaretoken': 'y2yGzMMJq2kVXGLUZ68JJxpNbYpFxZyRcjbOJxbQH5OsqJg8RaY1T3pQvo2Bpv7F', 'fruits': 'apple,orange'} #}
© www.soinside.com 2019 - 2024. All rights reserved.