2013-02-27 12 views
7

Chciałbym użyć niestandardowych arkuszy CSS i obrazów na moich niestandardowych stronach 404/500, które zrobiłem. Django nie uwzględnia jednak zmiennej STATIC_URL na tych stronach. Jaki byłby najlepszy sposób, aby to osiągnąć? Próbowałem także tworzyć niestandardowy widok 404/500 i renderować dowolny plik HTML, ale nie wyszło tak świetnie.Używanie statycznych plików na niestandardowych stronach 404/500 w Django

Odpowiedz

14

Oto w jaki sposób to zrobić:

# 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 

Warto wspomnieć przyczynę Django nie robi tego domyślnie:

„ Domyślny widok 500 nie przekazuje żadnych zmiennych do szablonu 500.html i jest renderowany z pustym kontekstem, aby zmniejszyć prawdopodobieństwo wystąpienia dodatkowych błędów. "

- Adrian Holovaty, Django documentation

+0

, więc jak mam odwoływać się do moich plików statycznych? – heri0n

+1

To dodaje 'STATIC_URL' do kontekstu szablonu. Możesz więc używać go tak jak zwykle. – Matt

2

biegnę na ten sam problem i znaleźć rozwiązanie, które nie wymaga niestandardowych szablonów lub ładowarki. Od wersji Django 1.4 można korzystać z tagów get_media_prefix i get_static_prefix, aby uzyskać dostęp do MEDIA_URL i STATIC_URL, gdy nie są one w kontekście.

W moim konkretnym przypadku (Django 1.5) chciałem uzyskać dostęp do statycznych obrazów na mojej stronie 500.html. Ja po prostu dodaje się na początku szablonu

{% load static %} 

a następnie otrzymany media i statycznych adresów URL z tych tagów

<img src="{% get_media_prefix %}logo.png"> 
<img src="{% get_static_prefix %}img/error_pages/error.png" style="height:235px;"> 

można znaleźć na oficjalnej dokumentacji tutaj: https://docs.djangoproject.com/en/1.5/ref/templates/builtins/#get-static-prefix

Powiązane problemy