heroku django "file does not exist" 当我尝试从服务器下载它时
heroku django "file does not exist" when i try to download it from the server
我成功地将我的应用程序部署到 heroku 服务器,但是当我尝试下载文件时遇到了这个问题(比如 <a href="{{object.file.url}}">Download</a>
)django return“找不到页面”错误“文件 'app/.../.../{file}' 不存在”(“app”不是真正的应用程序名称。我不知道,它来自哪里)。其他静态文件(如 href="{% static "path/to/file" %}"
)效果很好。在管理面板中同样的事情,当我转到存储文件路径的模型实例时 - 显示路径,但没有从那里下载任何内容。我该怎么办?
我找到了解决问题的办法。上面有必要澄清一下:我不需要 full-fledged 单独的服务器来存储 AWS S3 等媒体文件,因为我的项目只是一个演示。这不是一个工作项目,所以我需要以一种可以保留本地 heroku 存储的方式解决问题。我解决了这个问题:我写了一个视图,其中 returns 通过 FileResponce 生成一个文件。
代码:
# views.py
# ... necessary imports
class Download(View):
def get(self, request, *args, **kwargs):
file_name = self.kwargs.get('file_name')
username = self.kwargs.get('username')
file_path = os.path.join(settings.BASE_DIR, 'media', 'documents', f'user_{username}', file_name)
if os.path.exists(file_path):
return FileResponse(open(file_path, 'rb'))
raise Http404
# urls.py
urlpatterns = [
...,
path('download/<str:username>/<str:file_name>', Download.as_view(), name='graduateWork/download'),
...,
# templatetags/file_name.py
from django import template
register = template.Library()
@register.filter
def get_file_name(fl: str):
return fl.split('/')[-1]
<a class='btn btn-success' style='text-decoration: none; color: white;' href="{% url 'graduateWork/download' username=document.publisher.username file_name=document.file.name|get_file_name %}">
Скачать <img src="{% static 'download.png' %}" height='20px;' alt="скачать">
</a>
如果您想像我一样继续使用 heroku 本地存储,请使用此解决方案。
我成功地将我的应用程序部署到 heroku 服务器,但是当我尝试下载文件时遇到了这个问题(比如 <a href="{{object.file.url}}">Download</a>
)django return“找不到页面”错误“文件 'app/.../.../{file}' 不存在”(“app”不是真正的应用程序名称。我不知道,它来自哪里)。其他静态文件(如 href="{% static "path/to/file" %}"
)效果很好。在管理面板中同样的事情,当我转到存储文件路径的模型实例时 - 显示路径,但没有从那里下载任何内容。我该怎么办?
我找到了解决问题的办法。上面有必要澄清一下:我不需要 full-fledged 单独的服务器来存储 AWS S3 等媒体文件,因为我的项目只是一个演示。这不是一个工作项目,所以我需要以一种可以保留本地 heroku 存储的方式解决问题。我解决了这个问题:我写了一个视图,其中 returns 通过 FileResponce 生成一个文件。
代码:
# views.py
# ... necessary imports
class Download(View):
def get(self, request, *args, **kwargs):
file_name = self.kwargs.get('file_name')
username = self.kwargs.get('username')
file_path = os.path.join(settings.BASE_DIR, 'media', 'documents', f'user_{username}', file_name)
if os.path.exists(file_path):
return FileResponse(open(file_path, 'rb'))
raise Http404
# urls.py
urlpatterns = [
...,
path('download/<str:username>/<str:file_name>', Download.as_view(), name='graduateWork/download'),
...,
# templatetags/file_name.py
from django import template
register = template.Library()
@register.filter
def get_file_name(fl: str):
return fl.split('/')[-1]
<a class='btn btn-success' style='text-decoration: none; color: white;' href="{% url 'graduateWork/download' username=document.publisher.username file_name=document.file.name|get_file_name %}">
Скачать <img src="{% static 'download.png' %}" height='20px;' alt="скачать">
</a>
如果您想像我一样继续使用 heroku 本地存储,请使用此解决方案。