Показать PDF в джанго

Мне нужно отобразить файл 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 все, что может решить.

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
0
496
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Это должно быть 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>

Примечание. Всегда добавляйте / в конце каждого маршрута.

спасибо, я сделал то, что вы рекомендуете, теперь браузер показывает совершенно пустой экран, когда ему нужно отобразить содержимое PDF, теперь он не показывает ошибку 404, но ничего не показывает, просто пустой.

kevin torres 27.11.2022 06:25

@kevintorres можешь попробовать src = "/media/{{ uploadPDF}}"

Sunderam Dubey 27.11.2022 06:32

@kevintorres Кажется, проблема с браузером, какой браузер вы используете, также скажите версию?

Sunderam Dubey 27.11.2022 06:45

@kevintorres Попробуйте использовать тег для встраивания в html, см. мой отредактированный ответ :)

Sunderam Dubey 27.11.2022 06:57

я использую оперу, я также пробовал с google chrome, и это не работает, когда я ввожу src = "/media/{uploadPDF}}" появляется ошибка 404, но когда я вставляю без /media/, он появляется полностью пустым , только граница. также я пытался встроить и вижу просто пустое

kevin torres 28.11.2022 00:54

Наконец-то я могу это решить, у меня были проблемы в моих 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">

Другие вопросы по теме