Nefunguje vám django.contrib.flatpage?
Prováděl jsem pár úprav na Django Česká republika, a po restartu serveru přestal web fungovat. Respektive — na jakýkoliv dotaz z prohlížeče vracel status kód 404 (neexistující stránka).
Django ČR využívá aplikaci django.contrib.flatpage. Její funkce je prostá — pokud uživatel zadá URL, pro které není v urls.py definované pravidlo, vyvolá se vyjímka Http404. Tato vyjímka je zachycena “midlwérem” django.contrib.flatpages.middleware.FlatpageFallbackMiddleware, a to natáhne view django.contrib.flatpages.views.flatpage. Funkce flatpage se podívá do databáze, a pokud v ní nalezne záznam pro požadované URL, vytáhne jej a zobrazí uživateli.
Elegantní a jednoduché řešení.
Něco se ale pokazilo, a trvalo mi poměrně dlouho, než jsem na to přišel. Problém byl totiž v šabloně. Zapomněl jsem v ní starý nefunkční templatetag, který způsobil chybu a kód v middleware vrátil původní odpověď z Djanga — tedy neobslouženou Http404.
Pamatujte: pokud vám začne aplikace
flatpagevracet404-kypro existující stránky (záznamy v databázi), zkontrolujte si obsah používaných šablon. Problém může být právě tam.
A nakonec malý tip od Vládi Macka: detektivní práci na živém serveru si usnadníte umístěním malých udavačů (v mém případě dovnitř middleware.py a views.py aplikace django.contrib.flatpages):
import time
print >>open('/tmp/django.log', 'a'), '%s: check #1' % time.ctime()
Po reloadnutí stránky nahlédněte do souboru /tmp/django.log a zjistíte, kudy se váš kód procházel.