【问题标题】:Pass python object to views Django将 python 对象传递给视图 Django
【发布时间】:2018-07-12 09:33:49
【问题描述】:

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

因此,您可以使用 csv 文件中的域列表填写表单。

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

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 文件中:

目前下载视图通过 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 机制来做到这一点?

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

谢谢!

【问题讨论】:

  • 很不清楚你在问什么。您应该添加一些代码并解释引用它的问题。
  • 但是如果用户发出 POST 请求,您可以将信息存储在request.POST 中。 request.POST 在服务器端是不可变的。
  • 不过,描述有点“混乱”。您能否提供一些示例程序的 MWE,例如构建响应,以便清楚您的目标是什么?
  • json-dump 到 str 到模板上下文并在客户端 json-load 吗?这样您就可以保留数据模型并在浏览器中随心所欲地使用它。

标签: python django django-views


【解决方案1】:

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

换句话说,我想象的是你有一个页面,其中包含生成的表格和一个按钮,上面写着“下载 CSV”,或者类似的东西。 您可以做的是创建一个 URL 来下载该 .csv,生成它并在您的响应中使用“Content-Disposition”标头。就像这个答案一样: https://stackoverflow.com/a/37299531/9989707

【讨论】:

  • 我更新了我的第一篇文章。 @Bruno Gonçalves 你是对的。但是您的链接问题并不能解决我的问题。我不知道如何从客户端更改发布请求。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-26
  • 2019-04-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多