Ссылка на скачивание в шаблоне, когда у вас есть модельный объект с файловым полем - PullRequest
0 голосов
/ 05 ноября 2018

Можно ли сделать ссылку для скачивания в HTML-шаблон, когда у вас есть доступный объект модели, например?

models.py

class Barcard(models.Model):
    name = models.CharField(max_length=30)
    drinks = models.ManyToManyField(Drink)
    barcardFile = models.FileField(blank=True, upload_to='barcard') 
    mixingFile = models.FileField(blank=True, upload_to='mixing') 

views.py

def download(request, barcard_id):
    if request.method == 'GET':
        barcard = get_object_or_404(Barcard, pk=barcard_id)
        return render(request, 'drinks/download.html', {'barcard':barcard})
    else:
        return HttpResponseRedirect('/drinks/')

шаблон / напитки / download.html

{% extends "drinks/base.html" %}
{% block fulltitle %}Drinks{% endblock %}
{% block content %}
    <h1>{{ barcard.name }}</h1>
    <p> Download barkort her: <a href='{{ MEDIA_URL }}{{ barcard.barcardFile.relative_path }}'>{{barcard.name}} barkort</a> </p>
    <p> Download blandekort her: <a href='{{ MEDIA_URL }}{{ barcard.mixingFile.relative_path }}'>{{barcard.name}} blandekort</a></p>
{% endblock %}

Прямо сейчас я не получаю файл при нажатии на ссылку. Я что-то пропустил или мне придется сделать что-то совершенно другое?

1 Ответ

0 голосов
/ 05 ноября 2018

Что заставляет вас думать, что есть атрибут relative_path? Вам необходимо использовать атрибут url, который включает префикс media_url.

<a href='{{ barcard.barcardFile.url }}'>

См. файл FileField .

...