Мне нужно отобразить файл PDF в браузере, но я не могу найти решение, чтобы взять PDF для носителя папки, файл PDF был сохранен в моей базе данных, но я не могу показать.
мой urls.py:
urlpatterns = [
path('uploadfile/', views.uploadFile, name = "uploadFile"),
path('verPDF/<idtermsCondition>', views.verPDF, name='verPDF'),
]
мои модели.py:
class termsCondition(models.Model):
title = models.CharField(max_length=20, verbose_name = "title")
uploadPDF = models.FileField(
upload_to = "PDF/", null=True, blank=True)
dateTimeUploaded = models.DateTimeField(auto_now_add=True)
deleted_at = models.DateTimeField(
auto_now=False, verbose_name = "Fecha eliminacion", blank=True, null=True)
class Meta:
verbose_name = "termsCondition"
verbose_name_plural = "termsConditions"
мои взгляды.py:
def uploadFile(request):
user = request.user
if user.is_authenticated:
if user.is_admin:
if request.method == "POST":
# Fetching the form data
fileTitle = request.POST["fileTitle"]
loadPDF = request.FILES["uploadPDF"]
# Saving the information in the database
termscondition = termsCondition.objects.create(
title=fileTitle,
uploadPDF=loadPDF
)
termscondition.save()
else:
listfiles = termsCondition.objects.all()[:1].get()
return render(request, 'subirTerminos.html', context = {
"files": listfiles
})
else:
messages.add_message(request=request, level=messages.SUCCESS,
message = "No tiene suficientes permisos para ingresar a esta página")
return redirect('customer')
else:
return redirect('login2')
def verPDF(request, idtermsCondition):
user = request.user
if user.is_authenticated():
if user.is_admin:
getPDF = termsCondition.objects.get(pk=idtermsCondition)
seePDF = {'PDF': getPDF.uploadPDF}
print(seePDF)
return render(request, 'subirTerminos.html', {'termsCondition': getPDF, 'uploadPDF': getPDF.uploadPDF})
else:
messages.error(request, 'Do not have permission')
else:
return redirect('login2')
мой HTML:
<div>
<iframe id = "verPDF" src = "media/PDF/{{ uploadPDF.url }}"
style = "width:800px; height:800px;"></iframe>
</div>
Я хочу увидеть свой PDF-файл, но я не могу, я хочу знать, как это сделать, я пробовал много решений, я принимаю js, встраиваю в iframe все, что может решить.
Это должно быть user.is_authenticated
не user.is_authenticated()
в представлении verPDF
, а также я бы рекомендовал вам изменить <idtermsCondition>
на <int:idtermsCondition>
, так как по умолчанию (если ничего не указано) он считается строкой.
urls.py
urlpatterns = [
path('uploadfile/', views.uploadFile, name = "uploadFile"),
path('verPDF/<int:idtermsCondition>/', views.verPDF, name='verPDF'),
]
И у {{uploadPDF.url}}
уже есть URL-адрес (полный путь к каталогу мультимедиа), и попробуйте использовать тег <embed>
, поэтому:
<div>
<embed id = "verPDF" src = "{{uploadPDF.url}}" width = "500" height = "375" type = "application/pdf">
</div>
Примечание. Всегда добавляйте
/
в конце каждого маршрута.
@kevintorres можешь попробовать src = "/media/{{ uploadPDF}}"
@kevintorres Кажется, проблема с браузером, какой браузер вы используете, также скажите версию?
@kevintorres Попробуйте использовать тег для встраивания в html, см. мой отредактированный ответ :)
я использую оперу, я также пробовал с google chrome, и это не работает, когда я ввожу src = "/media/{uploadPDF}}" появляется ошибка 404, но когда я вставляю без /media/, он появляется полностью пустым , только граница. также я пытался встроить и вижу просто пустое
Наконец-то я могу это решить, у меня были проблемы в моих views.py и в html, когда я вызывал uploadPDF, мои представления вызывали другое имя, которое было loadpdf, и когда я отображал его, это было другое имя.
now, views.py:
``def uploadFile(request):
user = request.user
if user.is_authenticated:
if user.is_admin:
if request.method == "POST":
# Fetching the form data
fileTitle = request.POST["fileTitle"]
loadPDF = request.FILES["uploadPDF"]
if termsCondition.objects.all().exists():
listfiles = termsCondition.objects.all()[:1].get()
listfiles.uploadPDF = loadPDF
listfiles.save()
else:
# Saving the information in the database
termscondition = termsCondition.objects.create(
title=fileTitle,
uploadPDF=loadPDF
)
return redirect('uploadFile')
else:
if termsCondition.objects.all().exists():
listfiles = termsCondition.objects.all()[:1].get()
return render(request, 'subirTerminos.html', context = {
"files": listfiles.uploadPDF
})
else:
listfiles = {}
return render(request, 'subirTerminos.html', context = {"files": listfiles})
else:
messages.add_message(request=request, level=messages.SUCCESS,
message = "No tiene suficientes permisos para ingresar a esta página")
return redirect('customer')
else:
return redirect('login2') ``
and html:
<h1 class = "title">Visualizador de PDF</h1>
<embed id = "verPDF" src = "{{files.url}}" width = "500" height = "375" type = "application/pdf">
спасибо, я сделал то, что вы рекомендуете, теперь браузер показывает совершенно пустой экран, когда ему нужно отобразить содержимое PDF, теперь он не показывает ошибку 404, но ничего не показывает, просто пустой.