Python Django下载模板中的文件Url
我发现有很多类似的问题,但没有很好的答案。我有一个用户上传文件的仪表板,它显示他们上传的文件。我想让他们能够点击和图标或文件名,并有它下载。现在,它会在浏览器中打开文件,而对于图像和pdf文件,这不是一个问题,因为您可以从那里保存。但是当你有一个docx或者二进制或者zip文件时,你需要一个下载链接,甚至对于pdf和图像来说也很好 以下是我的观点,忽略注释掉的部分:Python Django下载模板中的文件Url,python,django,Python,Django,我发现有很多类似的问题,但没有很好的答案。我有一个用户上传文件的仪表板,它显示他们上传的文件。我想让他们能够点击和图标或文件名,并有它下载。现在,它会在浏览器中打开文件,而对于图像和pdf文件,这不是一个问题,因为您可以从那里保存。但是当你有一个docx或者二进制或者zip文件时,你需要一个下载链接,甚至对于pdf和图像来说也很好 以下是我的观点,忽略注释掉的部分: @login_required(login_url='/dashboard-login/') def dashboard(requ
@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))
这是模板,不用担心过滤器,它只是basename,充当文件名的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>
从
但这是在一个视图中,我需要以某种方式在模板内部执行此操作,或者在视图中找到执行此操作的方法,但我不知道如何执行此操作。我考虑过使用进程\响应的中间件,但我不知道在这种情况下如何编写它
我需要通过视图的行获取为该用户显示的所有文件:files=ClientUpload.objects.filter(client=current\u client)
,并找到一种方法将其作为下载,而不是在浏览器中打开URL
如果有人有过这种情况的经验,或者知道如何自定义模板、视图或添加其他内容来处理这种情况,那么举个小例子会有很大帮助
我已经在这上面呆了很长一段时间,似乎无法让它工作。任何建议都将不胜感激。这是您需要的吗?
<a href="{{ object.file_field.url }}" download>{{ object.file_field }}</a>
我已经试过了,它只是在浏览器中打开文件,我希望它强制下载。不,这应该强制下载——除非你使用Safari或IEOh,我看到标签中有放置下载,让我试试。
<a href="{{ object.file_field.url }}" download>{{ object.file_field }}</a>