django - 如何通过Django中的链接下载上传的文件
问题描述
我正在上传文件并将其保存在媒体文件夹之外的文件夹中。我想在模板中添加下载链接,以便能够直接下载文件。如果我应该添加一些东西,我不确定要在 URL 中添加什么
我在模板中试过这个,它说找不到 URL
<a href="{{data.tar_gif.url}}"> Download File</a>
视图.py
def uploaddata(request):
if request.user.is_authenticated:
if request.method == 'POST':
form = uploadform(request.POST, request.FILES)
if form.is_valid():
form.save()
return redirect('file_list')
else:
form = uploadmetaform()
return render(request, 'uploaddata.html', {
'form': form
})
else:
return render(request, 'home.html')
网页
<tbody>
{% for data in dataset %}
<tr>
<td>{{data.path_id}}</td>
<td>{{ data.tar_gif }}</td>
<td>
<a href="{{data.document.url}}"> Download File</a>
</td>
</tr>
{% endfor %}
</tbody>
模型.py
class UserProfile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
Assigned_Group= models.CharField(max_length=500, choices=Group_choices, default='Please Select')
def __str__(self):
return self.user.username
上传文件
def nice_user_folder_upload(instance, filename):
extension = filename.split(".")[-1]
return (
f"{instance.user_profile.Assigned_Group}/{filename}"
)
class uploadmeta(models.Model):
path = models.ForeignKey(Metadataform, on_delete=models.CASCADE)
user_profile = models.ForeignKey(UserProfile, on_delete=models.CASCADE, null=True, verbose_name='Username')
document = models.FileField(upload_to=nice_user_folder_upload, verbose_name="Dataset") # validators=[FileExtensionValidator(allowed_extensions=['tar', 'zip'])]
def __str__(self):
return self.request.user
解决方案
实际上,通过使用 html下载属性来实现这一点的简单方法是通过
<a href="{{data.document.url}}" download> Download File</a>
或者你也使用:
<a href="{{ data.document.url }}" download="{{ data.document.url }}"> Download File</a>
推荐阅读
- python - 为什么我的 groupby 为“产品”列返回不正确的值?
- microsoft-teams - 如何在 Microsoft Teams 中显示自定义选项卡应用程序的内容以进行统一搜索
- javascript - SQLSTATE[42000],未定义密码
- java - 在我自己的 android 应用程序上使用 VLC 媒体播放器
- spring - 每次我将项目作为 spring 应用程序运行时,spring data jpa 都会附加 create 语句,
- javascript - d3.js 棒棒糖图表 - 动画
- javascript - React Native - 模态触发按钮始终可见
- python - Pyspark - 将两列中的值转换为字典
- python - TF2、Tensorflow Probability 随机种子生成器和 VAE
- node.js - 节点缓存是否使用锁