假设我要传递的参数叫
printdata
,printdata=['a', 'b', 'c']
。
我用
"input type="hidden" name="alist" value={{printdata}}>"
来通过
参数。但是,当我尝试检索参数时
使用以下代码的views.py:
params = request.POST
params["alist"]
等于 ['a',
而不是 ['a', 'b', 'c']
。我怀疑
django 使用 ,
来标识参数的结尾。
您有什么建议或其他方法来传递参数吗?
在 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']
确保在 HTML 中的列表字符串两边加上引号。即:
<input type="hidden" name="alist" value="{{printdata}}">
使用
request.POST.getlist('alist')
获取值。
alist = request.POST.get('alist')
例如,如果您在
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'} #}