bootstrap - href django
¿Cómo hacer que Django reinicie runserver en el cambio de plantilla? (6)
El archivo se leerá de forma predeterminada en el disco en cada solicitud, por lo que no es necesario reiniciar nada.
Hay un cargador de plantillas de almacenamiento en caché, pero está deshabilitado de forma predeterminada. Ver la documentación para más información.
Cuando realizo una modificación en un archivo fuente python en mi proyecto, Django lo detecta y reinicia el servidor runserver. Pero cuando modifico una plantilla django, tengo que matar a runserver y reiniciarlo de nuevo: ¿cómo puedo hacer para que runserver se reinicie automáticamente en el cambio de plantilla?
Para agregar a la respuesta de knutin, el problema al que se enfrenta es exactamente causado por FetchFromCacheMiddleware, por lo que todo lo que debe hacer es deshabilitarlo en el archivo settings.py de la siguiente manera:
settings.py:
MIDDLEWARE_CLASSES = (
...
#''django.middleware.cache.FetchFromCacheMiddleware'',
...
)
Ejecute touch
contra uno de los archivos fuente de Python.
Debido a que runserver
monitorea los archivos .py en busca de cambios, no se reinicia para un cambio en las plantillas (.html). Puede iniciar este reinicio editando virtualmente cualquiera de los archivos .py usando el comando touch
, que actualiza su fecha modificada y deja todos los demás contenidos iguales.
Tenía un problema similar, sin embargo, mis plantillas requerían un script de django manager para poder actualizarlas. No hay una manera simple de hacer que django vea otros tipos de archivos, pero aquí hay un trabajo que yo uso.
Esta es una secuencia de comandos independiente que ahora uso para ejecutar el servidor de desarrollo:
#!/usr/bin/python
import time, subprocess, sys, os, re
from threading import Thread
run = True
def monitor():
while run:
os.system("./manage.py update_templates")
os.system("touch website/urls.py")
os.system("inotifywait -e modify,create,delete website/templates/*.html")
t = Thread(target=monitor)
t.start()
time.sleep(0.5)
args = ''''
if len(sys.argv) > 1:
for i in range( 1, len(sys.argv)):
args += sys.argv[i] +'' ''
print("./manage.py runserver %s" % args)
os.system("./manage.py runserver %s" % args)
run = False
t.join()
Este script funciona bajo las siguientes suposiciones:
- Usando python3
- Este script se coloca junto con manager.py
- manager.py es ejecutable
- La aplicación web se llama sitio web
- El sitio web tiene un archivo llamado web / urls.py
- Estás usando GNU / Linux, que admite inotify
El archivo se leerá desde el disco sin la necesidad de reiniciar el servidor, solo asegúrese de desactivar todo el almacenamiento en caché.
Deshabilitar el cargador de plantillas en caché
El cargador de plantillas en caché no está habilitado de manera predeterminada, pero es posible que haya habilitado esto en su configuración de producción. Asegúrese de que el cargador de plantillas en caché no esté habilitado en su configuración de desarrollo. Documentos de Django en el cargador de plantillas en caché
Utilice el marco de caché ficticio
Cuando usa el marco de almacenamiento en caché django, esto puede hacer que las plantillas no se vuelvan a cargar. El marco predeterminado que utiliza Django es el almacenamiento en caché de memoria local, lo que significa que tendrá que configurar explícitamente el almacenamiento en caché para desactivar el marco de almacenamiento en caché. Django documenta el almacenamiento en caché simulado
No necesita reiniciar el servidor para volver a cargar los cambios de plantilla.
En producción puedes hacer esto:
En settings.py, para la configuración de PLANTILLAS
- Eliminar la configuración APP_DIRS
- En cambio, agregue esta configuración a OPCIONES:
''loaders'': [
''django.template.loaders.filesystem.Loader'',
''django.template.loaders.app_directories.Loader'',
],
Por qué esto funciona:
La configuración DEBUG es True por defecto (en modo de desarrollo). En este modo, Django no almacena en caché las plantillas. Pero en el modo de producción (es decir, DEBUG = False), Django habilita el almacenamiento en caché de plantillas. Por lo tanto, se necesita reiniciar el servidor para volver a cargar la plantilla editada / tocada.
Nota:
Tenga en cuenta que, al deshabilitar el almacenamiento en caché de plantillas, en su máquina de producción, agregará una sobrecarga para cada solicitud que se realice.