Django загружает файл

у меня есть бд, я сделал ее с помощью Django, и с помощью models.CharField я создал путь, по которому пользователи будут загружать файл в свой пост. в MEDIA_URL = "/media/" но я пытался дать пользователю возможность скачать содержимое (файл) по ссылке или просто щелчком мыши. как я могу это сделать! У меня есть несколько имен файлов в моем models.py вот так:

files_Tensile = models.FileField(blank=True, null=True, upload_to="chapters/%Y/%m/%D")
files_Charpy = models.FileField(blank=True, null=True, upload_to="chapters/%Y/%m/%D")
files_Modulus = models.FileField(blank=True, null=True, upload_to="chapters/%Y/%m/%D")
Diagramm_Hohen_Temp = models.ImageField(blank=True, null=True, upload_to="chapters/%Y/%m/%D")
files_Metallo = models.FileField(blank=True, null=True, upload_to="chapters/%Y/%m/%D")
Gefüge = models.ImageField(blank=True, null=True, upload_to="chapters/%Y/%m/%D")
Diagramm_Wärmebehandlung=models.ImageField(blank=True,null=True,upload_to="chapters/%Y/%m/%D")
files_Density = models.FileField(blank=True, null=True, upload_to="chapters/%Y/%m/%D"

the views.py:

    def download(request, path):
        file_path = os.path.join(settings.MEDIA_ROOT, path)
        if os.path.exists(file_path):
            with open(file_path, 'rb') as fh:
                response = HttpResponse(fh.read(), content_type="application/vnd.ms-excel")
                response['Content-Disposition'] = 'inline; filename=' + os.path.basename(file_path)
                return 

response
    raise Http404

в html:

<td><a  href="media/files_Density/download"> Download Files</a></td>

Я получаю ошибку, Страница не найдена (404). может ли кто-нибудь объяснить, как это исправить?

для того, чтобы пользователь мог просматривать созданные им файлы после загрузкиMEDIA_URL = "/media/"

Самый простой способ скачать файл по клику (который находится на том же сервере, что и веб-страница) - добавить в тег html a атрибут download

в html

<td><a  href="fileURLGoesHere" download> Download Files</a></td>

Я думаю, вам следует заменить CharField на FileField, поскольку он будет обрабатывать многое из этого от вашего имени :), включая сохранение в каталог media/, или вы можете указать другое место, просто нужно прочитать документацию

Вернуться на верх