Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.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 视图没有';t返回HttpResponse对象。它没有收到任何回音_Python_Django_Httpresponse - Fatal编程技术网

Python 视图没有';t返回HttpResponse对象。它没有收到任何回音

Python 视图没有';t返回HttpResponse对象。它没有收到任何回音,python,django,httpresponse,Python,Django,Httpresponse,我正在使用Django 1.11,我正在尝试改进一个现有的代码,该代码允许将数据导出到Excel文件。有两种情况: 文件包含的行数少于70.000行。这样,用户可以直接下载生成的输出文件 文件包含超过70.000行。在这种情况下,文件将写入介质文件夹 我对第二部分有意见 该文件在媒体文件夹中写得很好,但我没有找到提供HttpResponse对象的方法 在我的HTML模板中,我有以下链接: <a title="Export to Excel" class="button btn btn-

我正在使用Django 1.11,我正在尝试改进一个现有的代码,该代码允许将数据导出到Excel文件。有两种情况:

  • 文件包含的行数少于70.000行。这样,用户可以直接下载生成的输出文件

  • 文件包含超过70.000行。在这种情况下,文件将写入介质文件夹

我对第二部分有意见

该文件在媒体文件夹中写得很好,但我没有找到提供HttpResponse对象的方法

在我的HTML模板中,我有以下链接:

<a title="Export to Excel" class="button btn btn-default" href="{% url 'app:export-xls' model=model %}">
    <span class="glyphicon glyphicon-export"></span>
</a>

在我看来,我有以下文件:

class ExportAPP(View):

    def export_xls(self, model=""):
        app_label = 'app'

        # create a workbook in memory
        output = io.BytesIO()

        book = Workbook(output, {'constant_memory': True})
        sheet = book.add_worksheet('Page 1')
        # Sheet header, first row
        row_num = 0

        #Part which fill the file, adjust columns etc ..
        ...

        book.close()

        if len(rows) < 70000:
            # construct response
            output.seek(0)
            name = 'Obsolete' if obsolete else ''
            name += str(model._meta.verbose_name_plural)
            response = HttpResponse(output.read(),
                                content_type="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet")
            response['Content-Disposition'] = 'attachment; filename="' + name + '.xlsx"'
            return response

        #The interesting part
        else:
            print('Export contains more than 70.000 entries')
            output.seek(0)
            name = 'Obsolete' if obsolete else ''
            name += str(model._meta.verbose_name_plural)

            name = name + "_" + str(datetime.now().strftime("%Y_%m_%d_%H_%M_%s")) + '.xlsx'
            file = default_storage.save(name, output)
class ExportAPP(视图):
def导出_xls(自身,型号=”):
应用程序标签='应用程序'
#在内存中创建工作簿
输出=io.BytesIO()
book=工作簿(输出,{'constant_memory':True})
工作表=书本。添加工作表(“第1页”)
#图纸标题,第一行
行数=0
#填充文件、调整列等的部分。。
...
book.close()
如果长度(行数)<70000:
#构造响应
输出搜索(0)
名称=“已过时”,如果已过时,则为“其他”
name+=str(model.\u meta.verbose\u name\u复数)
response=HttpResponse(output.read(),
content_type=“application/vnd.openxmlformats officedocument.spreadsheetml.sheet”)
响应['Content-Disposition']='附件;filename=“'+name+'.xlsx”'
返回响应
#有趣的部分
其他:
打印('导出包含超过70.000个条目')
输出搜索(0)
名称=“已过时”,如果已过时,则为“其他”
name+=str(model.\u meta.verbose\u name\u复数)
name=name+“”+str(datetime.now().strftime(“%Y_%m_%d_%H_%m_%s”)+”.xlsx'
file=default\u storage.save(名称、输出)
我得到了这个问题:

视图app.views.export.export\u xls未返回HttpResponse对象。它返回的是无。


我想返回相同的模板页面,但我找不到方法。

您应该在此处返回一些内容,一些页面或代码200,或者重定向到一些页面(返回HttpResponseRedirect(“/Thank/”):


您的代码正在到达
else
语句。您没有在else语句中返回任何响应。应该是这样的

else:
    print('Export contains more than 70.000 entries')
    output.seek(0)
    name = 'Obsolete' if obsolete else ''
    name += str(model._meta.verbose_name_plural)

    name = name + "_" + str(datetime.now().strftime("%Y_%m_%d_%H_%M_%s")) + '.xlsx'
    file = default_storage.save(name, output)
    return HttpResponseRedirect('/')

else
子句中没有
返回响应。所以它返回
None
@nigel222是的,我同意。但是我不知道如何返回我在上调用函数的模板。不太清楚你的意思<代码>将HttpResponseRedirect(…)
返回到问题顶部提供HTML的同一视图?是的,就是这样。但在验证你的答案之前,我有一个问题。在导出之前,我正在进行搜索,搜索结果将写入我的文件中。我想在
HttpResponseRedirect
中获取此页面,如下所示:
http://localhost:8000/finalproduct/list/?mah=&releasing_body=&trade_name=&member_state=&pheur_name=&decision=&final_bulk_num=&domain=&manufacturer_name=&date_from=2018%2F10%2F18&name=&date_to=2019%2F02%2F12&eu_cert_n=&status=current&upstream_code_product=&certificate_nullified=both
。有一种方法可以返回此url?
return redirect(反向('finalproduct_list')+'?mah=&releasing_body=&trade_name=&member_state=&pheur_name=&decision=&final_bulk_num=&domain=&date_from=2018%2F10%2F18&name=&date_-to=2019%2F02%2F12%2F12&eu_-cert_-n=&status=当前和上游_-code_-product&u-nullified=两者)
您必须创建一个URLfirst@I使用部分答案获取动态url。
else:
    print('Export contains more than 70.000 entries')
    output.seek(0)
    name = 'Obsolete' if obsolete else ''
    name += str(model._meta.verbose_name_plural)

    name = name + "_" + str(datetime.now().strftime("%Y_%m_%d_%H_%M_%s")) + '.xlsx'
    file = default_storage.save(name, output)
    return HttpResponseRedirect('/')