Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/288.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 如何修复从Django应用程序下载文件失败_Python_Django - Fatal编程技术网

Python 如何修复从Django应用程序下载文件失败

Python 如何修复从Django应用程序下载文件失败,python,django,Python,Django,在我的django应用程序中,程序创建一个文档并将其保存到settings.py MEDIA_URL中定义的文件路径。如果文件存在,用户应该能够单击模板中的链接,文件应该下载。当我这样做时,我得到了一个.docx下载,但它显示“失败-没有文件” 我注意到两件事:1)立即下载的文件在打开时是空白的。2) 当我在settings.py中查看由文件路径定义的文件夹时,我可以看到该文件在那里,并按原样填写。很明显,在我看来,我做错了什么,但你知道我做错了什么吗?我觉得这应该是工作,因为我可以看到.doc

在我的django应用程序中,程序创建一个文档并将其保存到settings.py MEDIA_URL中定义的文件路径。如果文件存在,用户应该能够单击模板中的链接,文件应该下载。当我这样做时,我得到了一个.docx下载,但它显示“失败-没有文件”

我注意到两件事:1)立即下载的文件在打开时是空白的。2) 当我在settings.py中查看由文件路径定义的文件夹时,我可以看到该文件在那里,并按原样填写。很明显,在我看来,我做错了什么,但你知道我做错了什么吗?我觉得这应该是工作,因为我可以看到.docx正在正确生成

设置.py

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

...

MEDIA_ROOT = os.path.join(BASE_DIR, 'web_unit')
MEDIA_URL = '/web_unit/'
views.py

创建.docx文件并保存它 index.html

显示如何在模板中设置指向文件url的链接
{%用于订单%}
...
{%if order.order_文件%}
{%endif%}
{%endfor%}

您需要始终在媒体URL前面加上
媒体URL
。为
文件字段保存的URL始终与
媒体根目录相对。并且
MEDIA\u URL
指向
MEDIA\u ROOT
,因此您应该添加:

href="{% get_media_prefix %}{{ order.order_file.url }}"

您还需要配置Django,以便开发服务器在遇到以
MEDIA\u url
as开头的url时知道该怎么办。

查看浏览器中的源HTML,href是什么?由于
/web\u unit/
是您的
媒体URL
,因此当我从浏览器中查看源HTML时,您的URL应该以/web\u unit/@dirkgroten yes开头href是
我不知道文件名中的随机字母串来自何处,但我确实在文件夹中看到了该文件。仍未下载。此文件夹的完整路径是什么?基本目录的名称是什么?假设这是在开发中,如何告诉Django您的媒体文件位于何处?我在上面的评论中链接了关于如何设置Django以在开发中为上传的文件提供服务的文档。Django需要一个url模式来提供该url。WBU是基本单位还是WBU/web单位?(manage.py的位置)是的,尽管我会将其包装在
if settings.DEBUG
中,因为您不希望在生产中使用它。
  {% for order in orders %}

    <tr>

   ...

      {% if order.order_file %}
        <td><a href="{{ order.order_file.url|default_if_none:'#' }}" download>Download</a></td>
      {% endif %}  
    </tr>
    {% endfor %}
href="{% get_media_prefix %}{{ order.order_file.url }}"