将python对象传递给视图Django

时间:2018-07-12 09:33:49

标签: python django django-views

感谢您的第一个反馈,看来我的解释太混乱了,我添加了一些代码块和图片来说明它。

因此您可以在csv文件上的域列表中填写表格。 form with csv input

分析列表中的域并将其传递到多结果视图:

def multiresult(request, *args, **kwargs):
    input_file = request.FILES['inputFile']

    def several_scoring(domain_file):
        domain_name_list = []
        line = domain_file.readline().decode("utf-8")
        while line != "":
            domain_name_list.append(line)
            line = domain_file.readline().decode("utf-8")

        domain_list = []
        for line in domain_name_list:
            domain = Domain(line.rstrip())
            domain.start_scanning()
            domain_list.append(domain)

        return domain_list

    domain_list = several_scoring(input_file)
    headers = domain_list[0].header_grading.displayable_list
    context = {
        'domain_list': domain_list,
        'headers': headers,
        'domain_list_dict': json.dumps([domain.__as_dict__() for domain in domain_list])
    }
    return render(request, "multiresult.html", context)

在模板上,我放置了一个下载按钮,以将这些结果通过下载视图保存到生成的csv文件中: multiresults page

当前下载视图通过url获得domain_list_dict:

<a href="{% url 'domain_analyse:download' domain_list=domain_list_dict %}" method="post" >
    <button type="button" class="btn btn-info btn-lg">
        <i class="fa fa-download"></i> Télécharger les résultats
    </button>
</a>

下载视图能够在获取数据时生成csv文件而不会出现问题。

我的问题是如何在不使用url的情况下将domain_list_dict(采用json格式)传递到下载视图?就像django会自动处理表单一样,我想更改request.POST,但我真的不知道该怎么做。我应该在客户端使用javascript还是可以通过jinja或django机制来做到这一点?

如果仍然缺少信息,请告诉我。

谢谢!

1 个答案:

答案 0 :(得分:0)

如果我的理解正确,您希望用户能够下载用户填写表单后生成的文件(.csv)。但是,您不想将数据存储在数据库中或本地。是吗?

换句话说,我在想的是您有一个包含生成的表格的页面和一个显示“下载CSV”或类似名称的按钮。 您可以做的是创建一个URL以下载该.csv,生成该URL,然后在您的响应中使用“ Content-Disposition”标头。就像这个答案: https://stackoverflow.com/a/37299531/9989707