... und pdf anzeigen kann ich auch nicht

Django, Flask, Bottle, WSGI, CGI…
Antworten
Pitwheazle
User
Beiträge: 1050
Registriert: Sonntag 19. September 2021, 09:40

Die "handbuch.pdf" liegt auch in "staticfiles/medien". Folgendes habe ich probiert:

Code: Alles auswählen

def handbuch(req):
    with open('medien/handbuch.pdf', 'rb') as pdf:
        response = HttpResponse(pdf.read(), content_type='application/pdf')
        response['Content-Disposition'] = 'inline; filename="handbuch.pdf"'
        return response
(Den Code habe ich so im Internet gefunden und verwende ihn mal wieder ohne so recht zu wissen, was er macht.)
ergibt den Fehler

Code: Alles auswählen

[Errno 2] No such file or directory: 'medien/handbuch.pdf'
... wahrscheinlich ist nur der Pfad falsch? Wie man das jetzt im Template macht weiß ich (hoffentlich) - wie man das im code einträgt, weiß ich nicht.
Sven_TKLOOP
User
Beiträge: 12
Registriert: Freitag 16. August 2024, 14:10

Ich weiß nicht wie deine Ordnerstruktur aussieht, der Error sagt aber dass es deine Datei nicht gibt.
Du könntest zum Testen mal den absoluten Pfad nutzen, dann sollte zumindest dieser Fehler nicht mehr erscheinen.

Als einfache Lösung:

Code: Alles auswählen

def handbuch(req):
    # Absoluten Pfad
    file_path = '/voller/pfad/zu/deinem/projekt/staticfiles/medien/handbuch.pdf'
    
    try:
        with open(file_path, 'rb') as pdf:
            response = HttpResponse(pdf.read(), content_type='application/pdf')
            response['Content-Disposition'] = 'inline; filename="handbuch.pdf"'
            return response
    except FileNotFoundError:
        return HttpResponse("Die Datei wurde nicht gefunden.", status=404)
Benutzeravatar
noisefloor
User
Beiträge: 4149
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

ungetestet:

Code: Alles auswählen

from django.templatetags.static import static
...
path = static('medien/handbuch.pdf')
with open(path, 'rb') as pdf:
    ...
Gruß, noisefloor
Pitwheazle
User
Beiträge: 1050
Registriert: Sonntag 19. September 2021, 09:40

Hallo ihr Lieben,das ist sehr nett, dass ihr hier noch antwortet. Der Beitrag ist aber schon etwas älter. ich habe tatsächlich auch zwischenzeitlich dazugelernt (ein bisschen) - das funktioniert schon länger.
@ SvenTKLOOP hat wahrscheinlich recht und ich hatte den verkehrten Link. Das z.B geht einfach mit:

Code: Alles auswählen

<a href="{% static 'medien/lernbox.pdf' %}">Hier findet man das Handbuch für die Lernbox und für Bingo.</a>
Antworten