2010-01-18 8 views
2

Je veux être en mesure d'utiliser variables supplémentaires sur un personnalisé 404 modèle.Variables supplémentaires sur un modèle 404 personnalisé

#404.html 
{{ extra_var }} 

J'ai déjà essayé:

#urls.py 
from myproject.myapp import views 
handler404 = views.handler404 

#views.py 
from django.template import RequestContext, loader 
from django import http 
def handler404(request): 
    extra_var = 'my_extra_var' 
    t = loader.get_template('404.html') 
    return http.HttpResponseNotFound(t.render(RequestContext(request, 
     {'request_path': request.path, 'extra_var': extra_var, }))) 

Cependant, il ne semble pas fonctionner: Je ne peux que l'accès à request_path.

+0

"Cela ne semble pas fonctionner" est horriblement vague. Ce qui se produit? Êtes-vous sûr que votre 'handler404' est appelé? Pouvez-vous accéder à 'request_path' dans votre template? –

+0

Je ne peux accéder qu'à 'request_path'. –

+0

Avez-vous 'DEBUG = True' dans vos paramètres? –

Répondre

2

Le fait que vous pouvez accéder à request_path mais pas extra_var suggère pour moi votre vue n'est pas appelée correctement, puisque request_path est automatiquement passé au modèle 404.html, par documentation:

Si vous ne définissez pas votre propre vue 404 - et il suffit d'utiliser la valeur par défaut, ce qui est recommandé - vous avez encore une obligation : vous devez créer un modèle 404.html dans la racine de votre modèle annuaire. La vue 404 par défaut utilisera ce modèle pour toutes les erreurs 404. La valeur par défaut vue 404 passera une variable au modèle: request_path, qui est l'URL qui a donné lieu à l'404.

Je pense que vous devez donner handler404 une chaîne, plutôt que d'un module, comme ceci:

handler404 = 'myproject.myapp.views.handler404' 
3

J'ai eu un problème similaire.

handler404 doit être défini dans le fichier urls.py, mais vous devez également l'importer, et ce n'est pas dans les documents.

  1. ajouter handler404 à vos importations

    from django.conf.urls.defaults import patterns, include, url, handler404 
    
  2. mis handler404="string.of.the.view.to.load"

    handler404="myApp.views.pagenotfound" 
    
  3. définir votre vue 404 en view.py comme une vue habituelle.

+0

il sera bon d'avoir cela dans les docs, aide pour les débutants beaucoup de temps est gaspillé –

Questions connexes