0

В моей модели у меня есть FileField, который мой шаблон отображает его как ссылку. Моя проблема в том, что связанный файл отображает url как имя. Что показывает на HTML странице:Django: Показать имя файла для загруженного файла

загруженное Файл: ./picture.jpg

Я смотрел на DjangoDocs в отношении имен файлов и предыдущей С.О. 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() 

attachment является FileField объектом, который имеет свойство filename, поэтому просто попросить это имущество. т.е.

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

Это помогло, но все еще есть проблемы. Я понимаю, что мне нужно вызвать наложение на имя файла, но не следует ли мне это называть foo? Также, где я помещаю вторую строку кода? В шаблоне? – Kervvv

+0

Хотелось бы, чтобы я мог голосовать, но у меня нет достаточного количества репутации, но LOL – Kervvv

1

В page.html:

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

должен быть изменен на:

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

Вы правы, я должен отображать только переменную, однако, то, что я определяю эту переменную, чтобы быть это актуальный вопрос, который я имею право Теперь. Мне жаль, что я не смог проголосовать, но у меня пока нет достаточного количества репутации. Lol – Kervvv

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> 
Смежные вопросы