当我在项目中的python源文件中进行修改时,Django检测到并重启runserver本身。但是当我修改django模板时,我必须杀死runserver并重新启动它:如何在模板更改时自动重启runserver?
答案 0 :(得分:18)
默认情况下,每次请求都会从磁盘读取文件,因此无需重新启动任何内容。
有一个缓存模板加载器,但默认情况下它被禁用。有关详细信息,请参阅the documentation。
答案 1 :(得分:8)
针对其中一个Python源文件运行touch
。
因为runserver
监视.py文件的更改,所以不会重新启动以更改模板(.html)。您可以使用touch
命令虚拟编辑任何.py文件来触发此重新启动,该命令刷新其修改日期并保留所有其他内容相同。
答案 2 :(得分:7)
要添加knutin的答案,您面临的问题恰恰是由FetchFromCacheMiddleware引起的,因此您需要做的就是在settings.py文件中将其禁用,如下所示:
settings.py:
MIDDLEWARE_CLASSES = (
...
#'django.middleware.cache.FetchFromCacheMiddleware',
...
)
答案 3 :(得分:1)
我遇到了类似的问题,但是我的模板需要运行django manager脚本才能更新它们。没有简单的方法让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()
此脚本在以下假设下工作:
答案 4 :(得分:1)
您无需重新启动服务器即可重新加载模板更改。
在制作中你可以这样做:
在settings.py中,用于TEMPLATES配置
- 删除APP_DIRS设置
- 而是将此设置添加到OPTIONS:
'loaders': [
'django.template.loaders.filesystem.Loader',
'django.template.loaders.app_directories.Loader',
],
为什么会这样:
默认情况下,DEBUG设置为True(在开发模式下)。在这种模式下,Django不会缓存模板。但是在生产模式下(即DEBUG = False),Django启用了模板缓存。因此,需要重新启动服务器以重新加载已编辑/触摸的模板。
注意:
请注意以下事实:通过禁用模板缓存,您将在生产计算机上为每个请求添加开销。
答案 5 :(得分:1)
另一种解决方案是确保debug
TEMPLATES
配置中的settings.py
设置为true
DEBUG = True
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': ['templates/'],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
'debug': DEBUG,
},
},
]
当debug
为False时,您必须手动重启服务器以查看对模板所做的任何更改(因为它们不会自动触发重启)
答案 6 :(得分:0)
该文件将从磁盘读取而无需重新启动runserver,只需确保禁用所有缓存。
禁用缓存模板加载程序
默认情况下未启用缓存模板加载程序,但您可能已在生产设置中启用了此功能。确保未启用缓存模板加载器的开发设置。 Django docs on the cached template loader
使用虚拟缓存框架
当您使用django缓存框架时,这可能导致模板无法重新加载。 Django使用的默认框架是本地内存缓存,这意味着您必须显式设置虚拟缓存以禁用缓存框架。 Django docs on dummy caching