当我在我的项目中对python源文件进行修改时,Django检测到并重新启动runserver本身。但是当我修改一个django模板时,我必须杀死runserver并重新启动它:如何在模板更改时自动重启runserver?如何使Django在模板更改时重新启动runserver?
回答
该文件默认情况下会在每次请求时从磁盘读取,因此不需要重新启动任何内容。
有一个缓存模板加载器,但默认情况下它是禁用的。有关更多信息,请参见the documentation。
针对其中一个Python源文件运行touch
。
由于runserver
监视.py文件以进行更改,因此无法重新启动模板(.html)中的更改。您可以通过使用touch
命令虚拟编辑任何.py文件来触发此重新启动,该命令刷新其修改日期并保留所有其他内容相同。
为了增加knutin的回答,您所面临的问题,通过FetchFromCacheMiddleware恰好造成了如此,所有你需要做的是在settings.py文件禁用它,如下所示:
settings.py:
MIDDLEWARE_CLASSES = (
...
#'django.middleware.cache.FetchFromCacheMiddleware',
...
)
我有一个类似的问题,但是我的模板需要运行一个django管理脚本才能更新它们。没有简单的方法让django观看其他文件类型,但是这里有一个我使用的工作。
这是一个独立的脚本,我现在用它来运行开发服务器:
#!/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()
在以下假设这个脚本的工作原理:
- 使用python3
- 这个脚本是沿侧放置manager.py
- manager.py可运行
- 该web应用程序被称为网站
- 该网站有一个名为网站/文件urls.py
- 你正在使用的GNU/Linux,它支持inotify的
该文件将从磁盘,而无需重新启动的runserver被读取,只要确定你禁用了所有的缓存。
禁用缓存模板加载器
缓存模板加载器默认情况下不启用,但你可能在你的生产设置中启用此。确保缓存的模板加载器未启用开发设置。 Django docs on the cached template loader
当您使用Django的缓存框架使用虚拟缓存框架
这可能会导致模板不重新加载。Django使用的默认框架是本地内存缓存,这意味着您必须显式设置虚拟缓存来禁用缓存框架。 Django docs on dummy caching
您不需要重新启动服务器来重新加载模板更改。
在生产中,你可以这样做:
settings.py中,对于模板配置
- 删除APP_DIRS设置
- 相反,该设置添加到选项:
'loaders': [
'django.template.loaders.filesystem.Loader',
'django.template.loaders.app_directories.Loader',
],
为什么这个作品:
默认情况下,DEBUG设置为True(在开发模式下)。在这种模式下,Django不会缓存模板。但在生产模式下(即DEBUG = False),Django启用模板缓存。因此,需要重新启动服务器才能重新加载已编辑/已触摸的模板。
注意:
请注意,通过在生产计算机上禁用模板缓存,您将为每次通过的请求添加开销。
- 1. 灰尘模板更改时重新启动节点
- 2. django无法启动runserver
- 3. shell脚本重新启动屏幕内的django runserver
- 4. 当Django代码更改时是否需要重新启动uWSGI?
- 5. 如何在文件更改时让ASP.NET重新启动?
- 6. 活动重新启动时,电话查看模式更改
- 7. 查看模式更改时活动重新启动
- 8. 如何在使用Django时处理dyno重新启动?
- 9. 厨师不断重新启动服务时没有更改到ERB模板
- 10. 如何在django runserver启动一个线程?
- 11. 如何在新应用更新时强制重新启动AppStore
- 12. 如何使定时器重新启动?
- 13. Eclipse活动在代码更改时不重新启动
- 14. Django从线程动态更新模板
- 15. 更改django模板路径
- 16. 如何在发生更新时重新启动应用程序?
- 17. 如何使用外键在django模板中重新组合
- 18. 在Django中,如何更改使用模板的用户组?
- 19. 如何重用Django模板?
- 20. 在数据更改时重新渲染Handlebars模板
- 21. 在应用程序中更改语言 - 如何重新启动?
- 22. 如何在重新进入活动时重新启动CountDownTimer
- 23. 更改速度模板以反映服务器未重新启动
- 24. 如何在本地数组更改时重新渲染流星火焰模板?
- 25. 如何更改CLion中的默认启动模板?
- 26. 当Ubuntu启动或重新启动时,Django Server自动运行?
- 27. 如何重新加载/usr/lib/lua/luci/dispatcher.lua修改后不重新启动板?
- 28. Amazon EBS EC2实例IP在重新启动时发生更改
- 29. 避免在方向更改时重新启动线程
- 30. Python模块在重新启动主模块后没有更新
OP已经表示他编辑了一个Python源文件,所以我没有看到'touch'会改变什么。 – metakermit 2013-11-14 20:59:09
@ kermit666:不,他说他编辑了一个模板。模板不是Python源文件。 – 2013-11-14 21:01:56