Ich möchte einige benutzerdefinierte CSS und Bilder auf meinen benutzerdefinierten 404/500 Seiten, die ich gemacht habe, verwenden. Django enthält die STATIC_URL-Variable auf diesen Seiten jedoch nicht. Was wäre der beste Weg, dies zu erreichen? Ich habe auch versucht, eine benutzerdefinierte 404/500-Ansicht zu machen und eine beliebige HTML-Datei zu rendern, aber es hat nicht so gut funktioniert.Verwenden von statischen Dateien in benutzerdefinierten 404/500 Seiten in Django
Antwort
Hier ist, wie ich es tun würde:
# urls or settings
handler500 = 'mysite.views.server_error'
# views
from django.shortcuts import render
def server_error(request):
# one of the things ‘render’ does is add ‘STATIC_URL’ to
# the context, making it available from within the template.
response = render(request, '500.html')
response.status_code = 500
return response
Es ist erwähnenswert, der Grund Django nicht diese standardmäßig tun:
„ Die Standardansicht von 500 übergibt keine Variablen an die Vorlage "500.html" und wird mit einem leeren Kontext gerendert, um die Wahrscheinlichkeit zusätzlicher Fehler zu verringern. "
Ich glaube, Sie werden nur die Standard 404/500 Fehlerbehandlung überschreiben müssen. Dies sollte Ihnen den Einstieg:
http://docs.djangoproject.com/en/dev/topics/http/views/#customizing-error-views
in meiner Frage i Ich habe das bereits erwähnt. – heri0n
Was passiert, wenn Sie versuchen, '{% load static from staticfiles%}' in die benutzerdefinierte Ansicht einzufügen? – GordonsBeard
ich in das gleiche Problem laufen und eine Lösung gefunden, die nicht benutzerdefinierte Vorlagen oder Handler benötigt. Ab Django 1.4 können Sie mit den Tags get_media_prefix und get_static_prefix auf MEDIA_URL und STATIC_URL zugreifen, wenn sie nicht im Kontext sind.
In meinem speziellen Fall (Django 1.5) wollte ich einige statische Bilder auf meiner Seite 500.html zugreifen. Habe ich nur noch am Anfang der Vorlage
{% load static %}
und erhalten dann die Medien und statische URLs mit diesen Tags
<img src="{% get_media_prefix %}logo.png">
<img src="{% get_static_prefix %}img/error_pages/error.png" style="height:235px;">
Sie die offizielle Dokumentation finden Sie hier: https://docs.djangoproject.com/en/1.5/ref/templates/builtins/#get-static-prefix
also, wie würde ich meine statischen Dateien referenzieren? – heri0n
Dies fügt "STATIC_URL" zum Kontext der Vorlage hinzu. Sie können es also wie gewohnt verwenden. – Matt