0

在我的模型中,我定义了一个FileField,我的模板将其显示为链接。我的问题是,链接的文件显示的网址作为名称。什么显示HTML网页是:Django:显示上传文件的文件名

上传的文件:./picture.jpg

我枕着DjangoDocs有关文件名和前S.O. question,但只是无法弄清楚。

我怎能:

  1. 它来显示不同的名称,而不是URL。
  2. 允许上传文件的管理员给它一个名称,然后在模板上查看该名称。

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

我page.html中:

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

回答

1

为您的代码:

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

attachmentFileField对象,有一个叫filename属性,所以只问了该属性。即

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

这有帮助,但仍有一些麻烦。我知道我需要调用文件名服装,但是不应该在定义foo时调用该文件吗?另外我在哪里放第二行代码?在模板中? – Kervvv

+0

我希望我能投票,但我没有足够的代表呢哈哈 – Kervvv

1

In page.html:

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

应改为:

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

你说得对,我应该表现仅仅是可变的,但是,我所定义一个变量是是,我有权利的当前问题现在。我希望我能投票,但我没有足够的代表还没有大声笑 – Kervvv

0

为了解决这个问题,我只是在models.py上增加了一个字段。这允许用户给它一个名字。并在页面上显示时,请按如下所示调用附件和附件_名称。希望这可以帮助。没有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>