Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将数组传递到URL的替代方法是什么?(URL太长)_Python_Django_Django Views_Django Templates_Request - Fatal编程技术网

Python 将数组传递到URL的替代方法是什么?(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.

当从GET方法请求时,url的创建方式如下

<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>