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

时间:2016-03-24 16:24:54

标签: django django-models django-templates django-views django-class-based-views

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

上传文件:./ picture = .jpg

我查看了DjangoDocs关于文件名和以前的S.O. question,但是无法理解。

我怎么能:

  1. 让它显示不同的名称,而不是网址。
  2. 允许上传文件的管理员为其命名,然后在模板上查看。
  3. my models.py:

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

    我的views.py(如果条目存在,则显示它,如果没有,则返回消息):

    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,
        })
    

    my page.html:

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

3 个答案:

答案 0 :(得分:2)

代码:

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

答案 1 :(得分:1)

在page.html中:

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

应更改为:

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

答案 2 :(得分:0)

要解决这个问题,我只需在models.py添加一个附加字段。这允许用户给它起一个名字。当在页面上显示它时,请调用Attachment和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>