Estoy creando una aplicación usando Django como mi caballo de batalla. Todo ha ido bien hasta ahora: configuraciones de db especificadas, directorios estáticos configurados, URL, vistas, etc. Pero los problemas comenzaron a escabullirse en el momento en que quería presentar mis propias páginas 404.html y 500.html hermosas y personalizadas.
Leí los documentos sobre el manejo personalizado de errores y configuré las configuraciones necesarias en UrlsConf, creé las vistas correspondientes y agregué el 404.html y el 500.html al directorio de plantillas de mi aplicación (también especificado en settings.py).
Pero los documentos dicen you can actually view custom error views until Debug is Off
, así que lo apagué para probar mis cosas, ¡y ahí es cuando las cosas se vuelven locas!
No solo no puedo ver el 404.html personalizado (en realidad, se carga, sino que debido a que mis páginas de error contienen un mensaje de error gráfico, como una buena imagen), se carga la fuente de la página de error, ¡pero nada más se carga! ¡Ni siquiera enlazó CSS o Javascript!
En general, una vez que configuro DEBUG = False
, todas las vistas se cargarán, ¡pero no se cargará ningún contenido vinculado (CSS, Javascript, Imágenes, etc.)! ¿Qué esta pasando? ¿Hay algo que falta, en relación con los archivos estáticos y la DEBUG
configuración?
fuente
Respuestas:
Con la depuración desactivada, Django ya no manejará archivos estáticos por usted; su servidor web de producción (Apache o algo así) debería encargarse de eso.
fuente
Si aún necesita un servidor estático localmente (por ejemplo, para realizar pruebas sin depurar), puede ejecutar devserver en modo inseguro:
fuente
Puede usar WhiteNoise para servir archivos estáticos en producción.
Instalar en pc:
Y cambie su archivo wsgi.py a esto:
¡Y estás listo para irte!
Crédito al blog creativo del manillar .
PERO, realmente no se recomienda servir archivos estáticos de esta manera en producción. Su servidor web de producción (como nginx) debería encargarse de eso.
fuente
wgsi.py
archivo. La documentación que vinculó parece dar otras instrucciones para usar WhiteNoise. Intentaremos otras formas y te actualizaré aquí.manage.py runserver --insecure
No funcionó para mí. Sin embargo, este sí.'whitenoise.middleware.WhiteNoiseMiddleware'
al middleware. Vea las notas de la versión del registro de cambiosEn urls.py agregué esta línea:
agregue esas dos URL en patrones de URL:
y tanto los archivos estáticos como los medios eran accesibles cuando DEBUG = FALSE.
Espero eso ayude :)
fuente
url(
conre_path(
Si está utilizando la vista de servicio estático en desarrollo, debe tener DEBUG = True:
Documentos: servir archivos estáticos en desarrollo
EDITAR: puede agregar algunas URL solo para probar sus plantillas 404 y 500, solo use la vista genérica direct_to_template en sus URL.
fuente
La respuesta de Johnny es genial, pero aún así no funcionó para mí simplemente agregando esas líneas que se describen allí. Basado en esa respuesta, los pasos que realmente funcionaron para mí fueron:
Instale WhiteNoise como se describe:
Cree la
STATIC_ROOT
variable y agregue WhiteNoise a suMIDDLEWARE
variable ensettings.py
:Luego, modifique su
wsgi.py
archivo como se explica en la respuesta de Johnny:Después de eso, implemente sus cambios en su servidor (con git o lo que sea que use).
Finalmente, ejecute la
collectstatic
opción desde sumanage.py
en su servidor. Esto copiará todos los archivos de sus carpetas estáticas en elSTATIC_ROOT
directorio que especificamos antes:Ahora verá una nueva carpeta llamada
staticfiles
que contiene dichos elementos.Después de seguir estos pasos, ahora puede ejecutar su servidor y podrá ver sus archivos estáticos mientras está en modo Producción.
Actualización: en caso de que tenga la versión <4, el registro de cambios indica que ya no es necesario declararlo
WSGI_APPLICATION = 'projectName.wsgi.application'
en susettings.py
archivo.fuente
En realidad, puede servir archivos estáticos en una aplicación Django de producción, de forma segura y sin ellos
DEBUG=True
.En lugar de usar Django, use dj_static en su archivo WSGI ( github ):
fuente
Simplemente abra su proyecto urls.py, luego encuentre esta declaración if.
Puede cambiar settings.DEBUG en True y funcionará siempre. Pero si su proyecto es algo serio, entonces debe pensar en otras soluciones mencionadas anteriormente.
En django 1.10 puedes escribir así:
fuente
Puede depurar esto de muchas maneras diferentes. Aquí está mi enfoque.
localsettings.py:
urls.py:
Asegúrese de leer los documentos;)
https://docs.djangoproject.com/en/2.0/howto/static-files/#limiting-use-to-debug-true
fuente
La compatibilidad con los argumentos de vista de cadena para url () está en desuso y se eliminará en Django 1.10
Mi solución es solo una pequeña corrección a la solución de Conrado anterior.
fuente
Aunque no es lo más seguro, puede cambiar el código fuente. navegar a
Python/2.7/site-packages/django/conf/urls/static.py
Luego edite como sigue:
Entonces, si
settings.debug==False
no afecta el código, también después de ejecutar, intentepython manage.py runserver --runserver
ejecutar archivos estáticos.NOTA : La información solo debe usarse para pruebas solamente
fuente
Hice los siguientes cambios en mi proyecto / urls.py y funcionó para mí
Agregue esta línea: desde django.conf.urls import url
y agregue: url (r '^ media / (? P. *) $', serve, {'document_root': settings.MEDIA_ROOT,}), en urlpatterns.
fuente