En suivant exactement le didacticiel trouvé ici , je ne peux pas créer de page d'erreur 500 ou 404 personnalisée. Si je tape une mauvaise URL, la page me donne la page d'erreur par défaut. Y a-t-il quelque chose que je devrais vérifier qui empêcherait une page personnalisée de s'afficher?
Répertoires de fichiers:
mysite/
mysite/
__init__.py
__init__.pyc
settings.py
settings.pyc
urls.py
urls.pyc
wsgi.py
wsgi.pyc
polls/
templates/
admin/
base_site.html
404.html
500.html
polls/
detail.html
index.html
__init__.py
__init__.pyc
admin.py
admin.pyc
models.py
models.pyc
tests.py
urls.py
urls.pyc
view.py
views.pyc
templates/
manage.py
dans mysite / settings.py je les ai activés:
DEBUG = False
TEMPLATE_DEBUG = DEBUG
#....
TEMPLATE_DIRS = (
'C:/Users/Me/Django/mysite/templates',
)
dans mysite / polls / urls.py:
from django.conf.urls import patterns, url
from polls import views
urlpatterns = patterns('',
url(r'^$', views.index, name='index'),
url(r'^(?P<poll_id>\d+)/$', views.detail, name='detail'),
url(r'^(?P<poll_id>\d+)/results/$', views.results, name='results'),
url(r'^(?P<poll_id>\d+)/vote/$', views.vote, name='vote'),
)
Je peux publier tout autre code nécessaire, mais que dois-je changer pour obtenir une page d'erreur 500 personnalisée si j'utilise une mauvaise URL?
Éditer
SOLUTION: j'avais un supplément
TEMPLATE_DIRS
dans mon settings.py et cela causait le problème
Réponses:
Sous votre principale,
views.py
ajoutez votre propre implémentation personnalisée des deux vues suivantes, et configurez simplement les modèles 404.html et 500.html avec ce que vous souhaitez afficher.Avec cette solution, aucun code personnalisé ne doit être ajouté à
urls.py
Voici le code:
Mettre à jour
handler404
ethandler500
sont exportées les variables de configuration de chaîne Django trouvées dansdjango/conf/urls/__init__.py
. C'est pourquoi la configuration ci-dessus fonctionne.Pour que la configuration ci-dessus fonctionne, vous devez définir les variables suivantes dans votre
urls.py
fichier et pointer les variables Django exportées vers la chaîne de chemin Python d'où ces vues fonctionnelles Django sont définies, comme ceci:Mise à jour pour Django 2.0
Les signatures des vues des gestionnaires ont été modifiées dans Django 2.0: https://docs.djangoproject.com/en/2.0/ref/views/#error-views
Si vous utilisez des vues comme ci-dessus, handler404 échouera avec le message:
Dans ce cas, modifiez vos vues comme ceci:
la source
500 template
ne sera pas rendurequest.user
car il signale une erreur de serveur 500, donc le serveur ne peut rien servir.Réponse officielle:
Voici le lien vers la documentation officielle sur la façon de configurer des vues d'erreur personnalisées:
https://docs.djangoproject.com/en/stable/topics/http/views/#customizing-error-views
Il dit d'ajouter des lignes comme celles-ci dans votre URLconf (les définir n'importe où ailleurs n'aura aucun effet):
Vous pouvez également personnaliser la vue des erreurs CSRF en modifiant le paramètre
CSRF_FAILURE_VIEW
.Gestionnaires d'erreurs par défaut:
Il vaut la peine de lire la documentation des gestionnaires d'erreur par défaut,
page_not_found
,server_error
,permission_denied
etbad_request
. Par défaut, ils utilisent ces modèles s'ils peuvent les trouver, respectivement404.html
,500.html
,403.html
et400.html
.Donc, si tout ce que vous voulez faire est de créer de jolies pages d'erreur, créez simplement ces fichiers dans un
TEMPLATE_DIRS
répertoire, vous n'avez pas du tout besoin d'éditer URLConf. Lisez la documentation pour voir quelles variables de contexte sont disponibles.Dans Django 1.10 et versions ultérieures, la vue d'erreur CSRF par défaut utilise le modèle
403_csrf.html
.Je t'ai eu:
N'oubliez pas qu'il
DEBUG
doit être défini sur False pour que ceux-ci fonctionnent, sinon les gestionnaires de débogage normaux seront utilisés.la source
Ajoutez ces lignes dans urls.py
urls.py
et implémentez nos vues personnalisées dans views.py.
views.py
la source
handler400
uniquement pour l'écraser avechandler400 = 'myapp.views.bad_request'
?render_to_response
. D'après la documentation: "Ce n'est pas recommandé et sera probablement obsolète à l'avenir."render_to_response
va être obsolète, voir ce qui suit (à utiliser à larender
place): stackoverflow.com/questions/44228397/…À partir de la page que vous avez référencée:
Je pense donc que vous devez ajouter quelque chose comme ceci à votre urls.py:
et similaire pour handler500.
la source
urlpatterns = ...
ligne, ajoutez une ligne qui dithandler500 = 'views.handle500'
, puis ajoutez undef handle500(request):
à votre views.py qui affiche votre 500.html.Si tout ce dont vous avez besoin est d'afficher des pages personnalisées
DEBUG = False
contenant des messages d'erreur sophistiqués pour votre site , ajoutez deux modèles nommés 404.html et 500.html dans votre répertoire de modèles et il récupérera automatiquement ces pages personnalisées lorsqu'un 404 ou 500 est soulevé.la source
'DIRS': [os.path.join(BASE_DIR, '<project_name>/templates')]
dans votre liste de modèles danssettings.py
.Dans Django 2. *, vous pouvez utiliser cette construction dans views.py
Dans settings.py
Dans urls.py
Habituellement, je crée default_app et gère les erreurs à l'échelle du site, les processeurs de contexte.
la source
exception
?locals()
? Le fichier s'affiche uniquementpass
.settings.py:
et ajoutez simplement vos pages
404.html
et500.html
dans le dossier des modèles. supprimer404.html
et500.html
des modèles dans l'application de sondages.la source
raise Http404('msg')
: stackoverflow.com/a/37109914/895245{{ request_path }}
est également disponible.Faire une erreur, Sur la page d'erreur, découvrez d'où django charge les modèles, je veux dire la pile de chemins.Dans la base template_dir, ajoutez ces pages html 500.html , 404.html . Lorsque ces erreurs se produisent, les fichiers de modèle respectifs seront automatiquement chargés.
Vous pouvez également ajouter des pages pour d'autres codes d'erreur, comme 400 et 403 .
J'espère que cette aide !!!
la source
Dans Django
3.x
, la réponse acceptée ne fonctionnera pas car ellerender_to_response
a été complètement supprimée et d'autres modifications ont été apportées depuis la version pour laquelle la réponse acceptée fonctionnait.Quelques autres réponses sont également là mais je présente une réponse un peu plus claire:
Dans votre
urls.py
fichier principal :Dans le
yourapp/views.py
dossier:Assurez-vous que vous avez importé
render()
dans leyourapp/views.py
fichier:Note latérale:
render_to_response()
était obsolète dans Django2.x
et il a été complètement supprimé dans la version3.x
.la source
En une seule ligne (pour la page générique 404):
la source
Cela fonctionne sur django 2.0
Assurez-vous d'inclure votre personnalisation
404.html
dans le dossier des modèles d'application.la source
Django 3.0
voici un lien comment personnaliser les vues d'erreur
voici le lien comment rendre une vue
dans le
urls.py
(le principal, dans le dossier du projet), mettez:et dans cette application (
my_app_name
), insérezviews.py
:REMARQUE:
error/404.html
est le chemin si vous placez vos fichiers dans le dossier de modèles de projets (pas dans les applications)templates/errors/404.html
, veuillez donc placer les fichiers où vous le souhaitez et écrivez le bon chemin.REMARQUE 2: après le rechargement de la page, si vous voyez toujours l'ancien modèle, modifiez-le
settings.py
DEBUG=True
, enregistrez-le, puis à nouveau dansFalse
(pour redémarrer le serveur et collecter les nouveaux fichiers).la source
DEUB=False
vos fichiers statiques peuvent ne pas être servis, ce qui vous empêche de prévisualiser les modifications de votre modèle d'erreur personnalisé. Utilisez./manage.py runserver --insecure
pour forcer Django à les servir quand même.Aucune vue supplémentaire n'est requise. https://docs.djangoproject.com/en/3.0/ref/views/
Mettez simplement les fichiers d'erreur à la racine du répertoire des modèles
Et il devrait utiliser votre page d'erreur lorsque le débogage est False
la source
Essayez de déplacer vos modèles d'erreur vers
.../Django/mysite/templates/
?Je suis sûr de celui-ci, mais je pense que ceux-ci doivent être "globaux" pour le site Web.
la source