2010-04-05 9 views
16

Używam szablonu 500.html dla mojej aplikacji, który jest identyczną kopią 404.html z drobnymi zmianami tekstu.adres URL django nie został rozwiązany w szablonie błędu 500 wewnętrznego serwera

Co ciekawe, zmienna kontekstowa {{media_url}} nie zostanie rozwiązana przez serwer, jeśli prezentowany jest plik 500.html (np. Gdy wymuszam wewnętrzny błąd serwera), w wyniku czego strona nie zawiera żadnych css.

Łatwym sposobem na obejście tego problemu byłoby zakodowanie łączy do css, ale jestem po prostu ciekawy, dlaczego adres media_url nie został rozwiązany. Prawdopodobnie dzieje się tak dlatego, że serwer napotyka wewnętrzny błąd serwera i to powoduje, że zmienne kontekstowe nie są już dostępne !?

+0

To samo dzieje się z '{{STATIC_URL}}'. – jjmontes

Odpowiedz

11

Program obsługi błędów 500 nie przekazuje do szablonu szablonu RequestContext, po prostu używa Context. Jak być może wiesz, MEDIA_URL jest dodawany w procesorze kontekstowym, który jest uwzględniany tylko wtedy, gdy używasz RequestContext.

Możesz ustawić własny 500 handler i przekazać RequestContext jeśli chcesz.

Oto link do django docs na temat tworzenia niestandardowego handler500.

+1

Zostanę przy domyślnym 500 handler'u i zakodowuję linki css. Dla mnie to dobrze ;-) Po prostu dobrze wiedzieć, dlaczego Django zachowuje się w ten sposób. Dzięki! –

3

Dokumentacja django zaleca, aby nie używać szablonu do pliku 500.html, ponieważ nie ma możliwości rozwiązania problemu z wyświetlaniem tego szablonu.

Wystarczy trzymać z prostym plikiem HTML informującym użytkownika, że ​​wystąpił błąd. To wszystko, co powinni wiedzieć.

Możesz przejrzeć dzienniki serwera, aby dowiedzieć się, co musisz wiedzieć.

Powiązane problemy