Python 将数组传递到URL的替代方法是什么?(URL太长)
当从GET方法请求时,url的创建方式如下Python 将数组传递到URL的替代方法是什么?(URL太长),python,django,django-views,django-templates,request,Python,Django,Django Views,Django Templates,Request,当从GET方法请求时,url的创建方式如下 <your_url>?paths=path1&paths=path2&paths=path3... 如果路径很长,则表示请求错误,请求行太大 有一个替代方案: request.POST.getlist('paths') 在模板中传递查询字符串中的数据的等效方法是什么,这样url就不会很长,所有文件都可以下载 views.py def test_download(request): paths = request.
<your_url>?paths=path1&paths=path2&paths=path3...
如果路径很长,则表示请求错误,请求行太大
有一个替代方案:
request.POST.getlist('paths')
在模板中传递查询字符串中的数据的等效方法是什么,这样url就不会很长,所有文件都可以下载
views.py
def test_download(request):
paths = request.GET.getlist('paths')
context ={'paths': paths}
response = HttpResponse(content_type='application/zip')
zip_file = zipfile.ZipFile(response, 'w')
for filename in paths:
zip_file.write(filename)
zip_file.close()
response['Content-Disposition'] = 'attachment; filename='+'converted files'
return response
模板
<a href ="{% url 'test_download' %}?{% for path in paths %}paths={{ path|urlencode }}&{% endfor %}">Converted Files</a>
您可以使用表单而不是超链接来提交POST请求并在POST数据中发送路径。参见下面的示例代码
<form method="POST" action="{% url 'test_download' %}">
{% csrf_token %}
{% for path in paths %}
<input type="hidden" name="paths" value="{{ path }}"
{% endfor %}
<button type="submit">Converted Files</button>
</form>
{%csrf_令牌%}
{路径%中的路径为%s}
我觉得您可以更好地将其设计为在get请求中包含一条路径,而不是多条路径。理想情况下,这应该能解决问题。在前端,您可以迭代路径并对每个路径进行GET调用。然后下载链接将不同,我已从这些路径压缩文件。是否需要创建单独的表单来存储路径?当我单击提交时,它应该下载,但它显示CSRF验证失败。您需要将crsf令牌添加到表单中。我忘了。刚刚编辑了答案,在表单中添加了{%csrf\u token%}
。你好,明,我需要你的帮助
<form method="POST" action="{% url 'test_download' %}">
{% csrf_token %}
{% for path in paths %}
<input type="hidden" name="paths" value="{{ path }}"
{% endfor %}
<button type="submit">Converted Files</button>
</form>