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