2010-02-27 9 views
4

J'utilise Django 1.1.1 stable. Lorsque DEBUG est défini sur TrueDjango flatpages fonctionne correctement; quand DEBUG est False chaque flatpage que j'essaie d'accéder soulève une erreur 404 personnalisée (mon modèle d'erreur fonctionne évidemment correctement).Django flatpages soulevant 404 lorsque DEBUG est faux (modèles 404 et 500 existent)

La recherche autour d'Internet suggère de créer 404 et 500 modèles que j'ai faits.

J'ai ajouté à FlatpageFallBackMiddleware pour middleware_classes et flatpages est ajouté aux applications installées. Des idées comment je peux faire des flatpages fonctionnent?

Répondre

0

La clé vérifie l'ordre de votre middleware. Middleware est exécuté dans l'ordre descendant sur le chemin dans (demande et affichage) et dans l'ordre bottom-out sur le chemin sur (réponse et exception). Donc, si vous arrivez à votre gestionnaire 404 sur ce qui devrait être une URL flatpage parfaitement raisonnable, alors quelque chose attrape le 404 avant que le middleware flatpages ne soit appelé.

1

essayez d'ajouter FlatpageFallBackMiddleware avant django.middleware.common.CommonMiddleware

et assurez-vous que votre 404.html et 500.html sont stockés dans la racine de vos modèles dir (eg: templates/404.html)

6

La même chose est arrivée à moi jusqu'à ce que je trouve que la vue 404 envoyait une réponse de 200 états. Donc, tout ce que vous avez à faire est d'ajouter ceci dans la vue qui gère votre réponse 404:

def 404_handler(request): ... 

    response = render_to_response('404.html', locals(), context_instance=RequestContext(request)) 
    response.status_code = 404 
    return response 
+0

qui m'a aidé, merci – dmitko

+0

bonne réponse. résolu mon problème. – pythondjango

0

eu la même erreur dans un contexte différent. Le problème a été causé par moi fichier changeant urls.py de

from django.conf.urls.defaults import * 

à

from django.conf.urls.defaults import include, patterns 

comme suggéré par pylint, mais omet handler404 et handler500 qui devraient être importées implicitement par l'importation *. Donc l'ajout de ceux à importer ou simplement l'importation * en tant que documents django a permis de résoudre le problème.

0

Créez une vue de gestion des erreurs qui imprime une pile import traceback;traceback.print_exc() au lieu d'ignorer l'erreur en mode silencieux.