gpt4 book ai didi

python - Django 下载模板中的文件 Url

转载 作者:行者123 更新时间:2023-11-28 20:41:53 24 4
gpt4 key购买 nike

我发现了很多类似的问题,但没有很好的答案。我有一个仪表板,用户可以在其中上传文件并显示他们上传的文件。我想让他们能够单击图标或文件名并下载它。现在它在浏览器中打开文件,这对于图像和 pdf 不是问题,因为您可以从那里保存。但是当你有一个 docx 或二进制文件或 zip 时,你需要一个下载链接,即使是 pdf 和图像也最好有下载链接。

这是我的看法,忽略注释掉的部分:

@login_required(login_url='/dashboard-login/')
def dashboard(request):
current_user = request.user
current_client = request.user.client

files = ClientUpload.objects.filter(client=current_client)

if request.method == 'POST':
if request.FILES is None:
return HttpResponseBadRequest('No Files Attached.')
form = UploadFileForm(request.POST, request.FILES)
if form.is_valid():
#dz_files = request.FILES
#for f in dz_files:
# new_file = ClientUpload(client=current_client, file_upload=f)
# new_file.save()
# logger = logging.getLogger(__name__)
# logger.info("File uploaded from " + current_client.company)
newfile = ClientUpload(client=current_client, file_upload=request.FILES.get('file_upload'))
newfile.save()
logger = logging.getLogger(__name__)
logger.info("File uploaded from " + current_client.company)
else:
logger = logging.getLogger(__name__)
logger.warning("Upload Failed")

return HttpResponseRedirect(reverse('dashboard'))
else:
form = UploadFileForm()

data = {'form': form, 'client': current_client, 'files': files}
return render_to_response('dashboard.html', data, context_instance=RequestContext(request))

这是模板,不用担心过滤器,它只是基本名称,并充当文件名称的 os.path.basename。它不适用于任何问题:

{% load i18n %}
{% load staticfiles %}
{% load sasite_filters %}

<table class="table">
<tr>
<th>{% blocktrans %}Filename{% endblocktrans %}</th>
<th>{% blocktrans %}Size (Bytes){% endblocktrans %}</th>
<th>{% blocktrans %}Upload Time{% endblocktrans %}</th>
<th>{% blocktrans %}Actions{% endblocktrans %}</th>
</tr>
{% for file in files %}
{% with uploaded_file=file.file_upload %}
<tr>
<th><a href="{{ MEDIA_URL }}{{ file.relative_path }}">{{ uploaded_file.name|basename }}</a></th>
<th>{{ uploaded_file.size }}</th>
<th>{{ file.created_at }}</th>
<th><a href="{{ uploaded_file.url }}" id="view-btn"><i class="fa fa-search"></i></a><a href="{% url 'dashboard-delete' upload_id=file.id %}"><i class="fa fa-trash-o"></i></a></th>
{% endwith %}
{% endfor %}
</tr>
</table>

如您所见,我有两个图标,一个是删除图标,一个是查看图标。我想做一个下载图标,或者把文件名做成下载链接。但是当我做类似 <a href="{{ MEDIA_URL }}{{ file.relative_path }}">Download</a> 的事情时它只是在浏览器中打开。

relative_path 只是模型上的一个属性,我也可以使用不带 MEDIA_URL 的 file_upload.path,但这是一回事。

我也试过把 file:///在 url 前面,它什么也不做,甚至不在浏览器中打开。

我读到我可以做类似的事情:

response = HttpResponse(mimetype='text/plain')
response['Content-Disposition'] = 'attachment; filename="%s.txt"' % p.filename
response.write(p.body)

来自 Django Serving a Download File

但那是在 View 中,我需要以某种方式在模板内部执行此操作,或者在 View 中找到执行此操作的方法,但我不知道如何执行此操作。我考虑过中间件 process_response但我不知道在这种情况下怎么写。

我需要通过 View 的行获取为该用户显示的所有文件:files = ClientUpload.objects.filter(client=current_client)并找到一种方法将它们作为下载提供,而不是在浏览器中打开 URL。

如果有人对这种情况有任何经验,或者知道我可以如何自定义我的模板、 View 或添加其他东西来处理这个问题,那么举一个小例子会有很大帮助。

我已经坚持了很长时间,似乎无法让它工作。任何建议将不胜感激。

最佳答案

<a href="{{ your_file_url}}" download>你需要什么?

关于python - Django 下载模板中的文件 Url,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31949581/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com