【发布时间】:2020-02-07 21:45:02
【问题描述】:
我有一个可以从管理页面编辑的模型。我想上传文件,然后将文件下载回来。
在模型中:
class Project(models.Model):
project_title = models.CharField(max_length=200)
project_content = models.TextField()
project_published = models.DateTimeField("date published", default=datetime.now())
project_file = models.FileField(default="Null",upload_to='Files')
def __str__(self):
return self.project_title
在管理员中:
class ProjectAdmin(admin.ModelAdmin):
#fields = ["project_title",
# "project_published",
# "project_content",
# "project_funded",]
fieldsets = [
("Title/date", {"fields": ["project_title", "project_published"]}),
("URL", {"fields":["project_slug"]})
("Content", {"fields":["project_content", "project_file"]}),
]
FileField 生成 2 个子字段:一个上传按钮,以及一个带有指向当前文件(如果存在)的链接的“当前”字段。
文件上传工作正常,文件存储在“文件”目录中,但是当我单击链接时,我被重定向到主页并获得“ID 为“1/change/Files/somefilename”的项目没有存在。也许它被删除了?错误。
我已尝试添加到管理员:
def file_link(self, Project):
if Project.project_file:
return "<a href='%s' download>Download</a>" % (Project.project_file.url,)
else:
return "No attachment"
file_link.allow_tags = True
file_link.short_description = 'File Download'
但它只是将 href 打印为纯文本,包含“Files/somefilename” url。
服务器最后处理的请求:
[10/Oct/2019 15:57:15]“GET /admin/main/project/1/change/Files/61765395_604632376708720_5004719923088326656_n_1_zAanPtO.jpg HTTP/1.1”301 0 [10/Oct/2019 15:57:15]“GET /admin/main/project/1/change/Files/61765395_604632376708720_5004719923088326656_n_1_zAanPtO.jpg/HTTP/1.1”302 0 [10/Oct/2019 15:57:15]“GET /admin/main/project/1/change/Files/61765395_604632376708720_5004719923088326656_n_1_zAanPtO.jpg/change/HTTP/1.1”302 0 [2019 年 10 月 10 日 15:57:15] "GET /admin/ HTTP/1.1" 200 7848
【问题讨论】:
-
你需要 mark_safe 的 href : docs.djangoproject.com/en/2.2/ref/utils/… ,但你能分享完整的错误堆栈跟踪吗?另外,您能否分享一下处理服务器的类型以及它的代码是什么?
-
现在尝试了mark_safe,它开始下载,但由于某种原因,它只是下载了首页的原始html而不是我的文件。没有堆栈跟踪,因为我只是被重定向到主页并将错误消息作为弹出窗口获取。另外,文件还没有变化,我会澄清我的帖子。
-
http code 301/302 表示已被重定向。表示文件已被删除(可能),您可以分享文件中发生更改的代码吗?
-
我没有编写任何修改文件的代码,因为我尝试先确定上传/下载。这实际上是影响文件的唯一部分,但我不知道服务器在保存文件时是否对文件做了一些事情。但据我所知,该文件位于“myproject\Files\”中,名称完全相同。
-
FileField 提供的文件的 URL,href 访问的文件是“/admin/main/project/1/change/Files/filename”,如果有帮助的话