Django:显示上传文件的文件名

Django: Display File Name for Uploaded File

在我的模型中,我定义了一个 FileField,我的模板将其显示为 link。我的问题是 linked 文件显示 url 作为名称。 html 页面上显示的是:

上传文件:./picture.jpg

我看过 DjangoDocs regarding file names and a previous S.O. ,但就是想不通。

我怎样才能:

  1. 让它显示不同的名称,而不是 url。
  2. 允许上传文件的管理员为其命名,然后可以在模板上查看。

我的models.py:

class model_name(models.Model):
    attachment = models.FileField()

我的views.py(如果条目存在,显示它,如果不存在,return消息):

from django.core.files import File
from vendor_db.models import model_name

def webpage(request, id):
    try:
        variable = model_name.objects.get(id=id)
    except model_name.DoesNotExist:
        raise Http404('This item does not exist')
    return render(request, 'page.html', {
        'variable': variable,
    })

我的page.html:

<p>Uploaded File: <a href="{{ variable.attachment.url }}">{{ variable.attachment }}</a></p>

在page.html中:

<p>Uploaded File: <a href="{{ model.Attachment.url }}">{{ model.Attachment }}</a></p>

应改为:

<p>Uploaded File: {{ variable }}</p>

对于您的代码:

class model_name(models.Model):
    attachment = models.FileField()

attachment 是一个 FileField 对象,它有一个名为 filename 的 属性,所以只需要那个 属性。即

foo = model_name.objects.create(attachment=some_file)
foo.attachment.filename # filename as a string is returned

为了解决,我只是在models.py中添加了一个额外的字段。这允许用户给它起一个名字。并在页面上显示时,调用附件和 Attachment_Name 如下所示。希望这可以帮助。没有 URL 混乱。

class model_name(models.Model):
    Attachment = models.FileField()
    Attachment_Name = models.CharField()

在我的 html 文件中:

<p>Uploaded File: <a href="{{ variable.Attachment.url }}">{{variable.Attachment_Name }}</a></p>