Загрузка PDF-файла через Django Admin, загрузка пользователями по ссылке на шаблоне
Я пытаюсь разрешить пользователям загружать PDF-файл, который я ранее загрузил в папку MEDIA_ROOT
через консоль администратора. Я эмулировал ответ в этом посте, однако он неполный, и я не могу понять, как это исправить. Надеюсь, кто-нибудь сможет заметить мою проблему в приведенном ниже коде.
settings.py
# Absolute filesystem path to the directory that will hold user-uploaded files.
# Example: "/home/media/media.lawrence.com/media/"
MEDIA_ROOT = str(BASE_DIR) + "/media/"
# URL that handles the media served from MEDIA_ROOT. Make sure to use a
# trailing slash if there is a path component (optional in other cases).
# Examples: "http://media.lawrence.com/media/", "http://example.com/media/"
MEDIA_URL = '/media/'
# Absolute path to the directory that holds static files.
# Example: "/home/media/media.lawrence.com/static/"
STATIC_ROOT = str(BASE_DIR) + "/static/"
# URL that handles the static files served from STATIC_ROOT.
# Example: "http://media.lawrence.com/static/"
STATIC_URL = '/static/'
models.py
from django.db import models
# Create your models here.
class ResumeModel(models.Model):
pdf = models.FileField(upload_to="resume_app/media/resume/")
# So this file gets uploaded to root > media > resume_app > media > resume
admin.py
from django.contrib import admin
from .models import ResumeModel
# Register your models here.
admin.site.register(ResumeModel)
views.py
from django.shortcuts import render
from .models import ResumeModel
# Create your views here.
def resume(request):
resume = ResumeModel.objects.all() # < Not sure if this part is needed?
return render(request, 'resume.html', context={'resume':resume})
template.html
...
<a href="{{ resume.pdf.url }}">Click here to download PDF</a>
...
Когда я навожу курсор на эту ссылку, url, на который она указывает, localhost:8083/resume/
, что является названием страницы, на которой мы сейчас находимся, поэтому я думаю, что <a href="{{ resume.pdf.url }}">
не указывает на правильный url файла PDF, который я загрузил. Загрузка работает, файл находится в папке root > media > resume_app > media > resume
. Что мне нужно сделать, чтобы ссылка работала?
Вы отправляете в шаблон все объекты резюме, хранящиеся в базе данных:
resume = ResumeModel.objects.all()
Вы можете отправить конкретное резюме, идентифицированное по первичному ключу (см. this):
def resume(request, resume_id):
resume = get_object_or_404(ResumeModel, resume_id)
return render(request, 'resume.html', context={'resume':resume})
В любом случае, вы можете протестировать шаблон, отправив первое резюме в базу данных:
def resume(request):
resume = ResumeModel.objects.first()
return render(request, 'resume.html', context={'resume':resume})