Cuando realizo una modificación en un archivo de origen python en mi proyecto, Django lo detecta y reinicia el servidor de ejecución. 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?¿Cómo hacer que Django reinicie runserver en el cambio de plantilla?
Respuesta
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. Vea the documentation para más información.
Ejecute touch
contra uno de los archivos fuente de Python.
Como runserver
monitorea los archivos .py por cambios, no se reinicia para un cambio en las plantillas (.html). Puede desencadenar este reinicio mediante la edición virtual de cualquiera de los archivos .py utilizando el comando touch
, que actualiza su fecha y deja todos los demás contenidos iguales.
El OP ya dijo que editó un archivo fuente de Python, por lo que no veo qué cambiaría 'touch '. – metakermit
@ kermit666: No, dijo que editó una plantilla. Las plantillas no son archivos fuente de Python. –
OK, tienes razón, mi error. Me retractaré del voto negativo una vez que se desbloquee. Aunque el método todavía es un poco hacky para mi gusto :) Idealmente tendríamos una buena integración entre grunt-contrib-watch y el servidor de ejecución de Django. – metakermit
Para añadir a la respuesta de knutin, el problema que se enfrentan es causada precisamente por FetchFromCacheMiddleware así que todo lo que tiene que hacer es deshabilitarlo en el archivo settings.py de la siguiente manera:
settings.py:
MIDDLEWARE_CLASSES = (
...
#'django.middleware.cache.FetchFromCacheMiddleware',
...
)
Tuve un problema similar, sin embargo, mis plantillas requerían un script 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.
Este es un proceso independiente que ahora utilizan para ejecutar el servidor dev:
#!/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 los siguientes supuestos:
- Uso python3
- Este script se coloca al lado de manager.py
- manager.py es ejecutable
- La aplicación web se llama sitio web
- El sitio web tiene un archivo llamado sitio web/urls.py
- Estás usando GNU/Linux, que es compatible con inotify
El archivo se lee desde el disco sin la necesidad de reiniciar ejecución del servidor, basta con Seguro que deshabilitas todo el almacenamiento en caché.
deshabilitar la caché cargador de plantillas
el cargador de plantilla en caché no está habilitado por defecto, pero que podría haber permitido que esta en ti ajustes de producción. Asegúrese de que el cargador de plantillas en caché no esté habilitado en su configuración de desarrollo. Django docs on the cached template loader
utilizar el marco de almacenamiento en caché simulado
Cuando se está utilizando la arquitectura de almacenamiento en caché de Django esto puede causar las plantillas no para recargar.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 docs on dummy caching
No es necesario reiniciar el servidor para volver a cargar los cambios de la plantilla.
En la producción se puede hacer esto:
En settings.py, para las plantillas de configuración
- Quitar los APP_DIRS ajuste
- En lugar de ello, agregue esta configuración para OPCIONES:
'loaders': [
'django.template.loaders.filesystem.Loader',
'django.template.loaders.app_directories.Loader',
],
por qué esto funciona :
La configuración de DEPURACIÓN es verdadera 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 por cada solicitud que se realice.
- 1. Django runserver permanent
- 2. Django manage.py runserver verbosidad
- 3. ¿Cómo puedo hacer que Bottle se reinicie al cambiar el archivo?
- 4. ¿Cómo hacer matemáticas en una plantilla de Django?
- 5. Django: Anular depuración = Verdadero desde el comando manage.py runserver
- 6. PyCharm manage.py runserver error
- 7. cómo puedo hacer que un compañero de equipo reinicie el servidor heroku desde su máquina
- 8. ¿Cómo cambio una Plantilla Django basada en el Grupo de usuarios?
- 9. Django urldecode en el archivo de plantilla
- 10. manage.py runserver
- 11. Plantilla de Django que compara la cadena
- 12. ¿Hay alguna forma de hacer que un bloque sea opcional en la plantilla de Django?
- 13. Módulo% en plantilla de Django
- 14. ¿Cómo hacer que un programa se reinicie solo? (Proceso de Linux)
- 15. ¿Cómo hacer que el motor de plantillas de Django se presente en plantillas de memoria?
- 16. Cómo representar el campo de formulario django en la plantilla
- 17. manage.py runserver Error: [Errno 10013]
- 18. django-multilingual y cambio entre idiomas en el lado de la plantilla
- 19. ¿Cómo hacer que las variables estén disponibles en la plantilla?
- 20. STATIC_URL indefinido en la plantilla Django base
- 21. ¿Cómo se representa "{{" en una plantilla django?
- 22. Cómo hacer especialización de plantilla en C#
- 23. ¿Cómo formatear dateTime en la plantilla django?
- 24. Cambio text_factory en Django/sqlite
- 25. ¿Cómo escapar {{o}} en la plantilla django?
- 26. django-registration - ¿cómo cambio example.com en el correo electrónico?
- 27. ¿Cómo hacer que una instancia de EC2 se reinicie automáticamente cuando ELB dice que no está disponible?
- 28. En Django, ¿cómo hacer para que django-storages, boto y easy_thumbnail funcionen bien?
- 29. itertools.groupby en una plantilla django
- 30. ¿Cómo obtener el valor clave en la plantilla django?
En la configuración, olvidé que configuré el almacenamiento en caché de la plantilla. Así que reemplazo ('django.template.loaders.cached.Loader', ('django.template.loaders.app_directories.Loader',)), por 'django.template.loaders.app_directories.Loader', y ahora no reinicio es necesario: muchas gracias – Eric
No estoy teniendo este problema con las plantillas normales (solo se utilizan las configuraciones predeterminadas), pero estoy teniendo este problema con algunas anulaciones de formas crudas. (solo se actualizan al reiniciar). Creo que esto se debe a que las plantillas de formas cruzadas se cargan desde una etiqueta de plantilla. ¿Alguna idea de lo que está pasando aquí? –
parece que la razón por la que las plantillas de formas cruzadas requieren un reinicio es que usan la función memoize() para almacenar en caché las plantillas. No hay forma de apagarlo en modo dev lo que puede causar mucha confusión. Mirando a través de la fuente de Django, el único otro lugar que memoize() se usa es almacenar patrones, por lo que runserver requiere un reinicio si cambias las URL. –