2013-02-27 6 views
7

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

14

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. "

- Adrian Holovaty, Django documentation

+0

also, wie würde ich meine statischen Dateien referenzieren? – heri0n

+1

Dies fügt "STATIC_URL" zum Kontext der Vorlage hinzu. Sie können es also wie gewohnt verwenden. – Matt

2

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