Je crée une application en utilisant Django comme cheval de bataille. Tout s'est bien passé jusqu'à présent - paramètres de base de données spécifiés, répertoires statiques configurés, URL, vues, etc. Mais les problèmes ont commencé à se faufiler au moment où je voulais rendre mes propres pages 404.html et 500.html.
J'ai lu les documents sur la gestion des erreurs personnalisées et défini les configurations nécessaires dans UrlsConf, créé des vues correspondantes et ajouté le 404.html et le 500.html au répertoire de modèles de mon application (spécifié également dans settings.py).
Mais les docs disent you can actually view custom error views until Debug is Off
, donc je l'ai éteint pour tester mes trucs, et c'est à ce moment que les trucs deviennent fous!
Non seulement je ne parviens pas à afficher le 404.html personnalisé (en fait, il se charge, mais parce que mes pages d'erreur contiennent chacune un message d'erreur graphique - comme une belle image), la source de la page d'erreur se charge, mais rien d'autre ne se charge! Pas même lié CSS ou Javascript!
Généralement, une fois que j'ai défini DEBUG = False
, toutes les vues se chargeront, mais tout contenu lié (CSS, Javascript, Images, etc.) ne se chargera pas! Que ce passe-t-il? Y a-t-il quelque chose qui manque, concernant les fichiers statiques et le DEBUG
réglage?
la source
Réponses:
Avec le débogage désactivé, Django ne traitera plus les fichiers statiques pour vous - votre serveur Web de production (Apache ou quelque chose) devrait s'en occuper.
la source
Si vous avez toujours besoin de serveur statique local (par exemple pour les tests sans débogage), vous pouvez exécuter devserver en mode non sécurisé:
la source
Vous pouvez utiliser WhiteNoise pour servir des fichiers statiques en production.
Installer:
Et changez votre fichier wsgi.py en ceci:
Et vous êtes prêt à partir!
Crédit au blog créatif du guidon .
MAIS, il n'est vraiment pas recommandé de servir des fichiers statiques de cette façon en production. Votre serveur Web de production (comme nginx) devrait s'en occuper.
la source
wgsi.py
fichier. La documentation que vous avez liée semble donner d'autres instructions pour utiliser WhiteNoise. Je vais essayer d'autres moyens et vous mettre à jour ici.manage.py runserver --insecure
n'a pas fonctionné pour moi. Mais celui-ci le fait.'whitenoise.middleware.WhiteNoiseMiddleware'
au middleware. Voir les notes de version du journal des modificationsDans urls.py, j'ai ajouté cette ligne:
ajoutez ces deux URL dans les motifs d'URL:
et les fichiers statiques et multimédias étaient accessibles lorsque DEBUG = FALSE.
J'espère que cela aide :)
la source
url(
parre_path(
Si vous utilisez la vue de service statique dans le développement, vous devez avoir DEBUG = True:
Docs: servir des fichiers statiques en développement
EDIT: Vous pouvez ajouter des URL juste pour tester vos modèles 404 et 500, utilisez simplement la vue générique direct_to_template dans vos URL.
la source
La réponse de Johnny est excellente, mais n'a toujours pas fonctionné pour moi simplement en ajoutant les lignes décrites ici. Sur la base de cette réponse, les étapes qui ont réellement fonctionné pour moi où:
Installez WhiteNoise comme décrit:
Créez la
STATIC_ROOT
variable et ajoutez WhiteNoise à votreMIDDLEWARE
variable danssettings.py
:Ensuite, modifiez votre
wsgi.py
fichier comme expliqué dans la réponse de Johnny:Après cela, déployez vos modifications sur votre serveur (avec git ou tout ce que vous utilisez).
Enfin, exécutez l'
collectstatic
option depuis votremanage.py
sur votre serveur. Cela copiera tous les fichiers de vos dossiers statiques dans leSTATIC_ROOT
répertoire que nous avons spécifié auparavant:Vous verrez maintenant un nouveau dossier nommé
staticfiles
qui contient de tels éléments.Après avoir suivi ces étapes, vous pouvez maintenant exécuter votre serveur et pourrez voir vos fichiers statiques en mode Production.
Mise à jour: Si vous aviez la version <4, le journal des modifications indique qu'il n'est plus nécessaire de déclarer le
WSGI_APPLICATION = 'projectName.wsgi.application'
dans votresettings.py
fichier.la source
Vous pouvez réellement servir des fichiers statiques dans une application Django de production, en toute sécurité et sans
DEBUG=True
.Plutôt que d'utiliser Django lui-même, utilisez dj_static dans votre fichier WSGI ( github ):
la source
Ouvrez simplement votre projet urls.py, puis recherchez cette instruction if.
Vous pouvez modifier settings.DEBUG sur True et cela fonctionnera toujours. Mais si votre projet est quelque chose de sérieux, vous devriez penser aux autres solutions mentionnées ci-dessus.
Dans django 1.10, vous pouvez écrire ainsi:
la source
Vous pouvez déboguer cela de différentes manières. Voici mon approche.
localsettings.py:
urls.py:
N'oubliez pas de lire les documents;)
https://docs.djangoproject.com/en/2.0/howto/static-files/#limiting-use-to-debug-true
la source
La prise en charge des arguments d'affichage de chaîne pour url () est obsolète et sera supprimée dans Django 1.10
Ma solution est juste une petite correction à la solution Conrado ci-dessus.
la source
Bien que ce ne soit pas le plus sûr, mais vous pouvez changer le code source. aller vers
Python/2.7/site-packages/django/conf/urls/static.py
Modifiez ensuite comme suit:
Donc, si
settings.debug==False
cela n'affecte pas le code, essayez égalementpython manage.py runserver --runserver
d'exécuter des fichiers statiques après l'exécution .REMARQUE : les informations ne doivent être utilisées qu'à des fins de test uniquement
la source
J'ai apporté les modifications suivantes à mon projet / urls.py et cela a fonctionné pour moi
Ajoutez cette ligne: depuis django.conf.urls import url
et ajoutez: url (r '^ media / (? P. *) $', serve, {'document_root': settings.MEDIA_ROOT,}), dans urlpatterns.
la source