2010-12-01 137 views

回答

16

该文件默认情况下会在每次请求时从磁盘读取,因此不需要重新启动任何内容。

有一个缓存模板加载器,但默认情况下它是禁用的。有关更多信息,请参见the documentation

6

针对其中一个Python源文件运行touch

由于runserver监视.py文件以进行更改,因此无法重新启动模板(.html)中的更改。您可以通过使用touch命令虚拟编辑任何.py文件来触发此重新启动,该命令刷新其修改日期并保留所有其他内容相同。

+0

OP已经表示他编辑了一个Python源文件,所以我没有看到'touch'会改变什么。 – metakermit 2013-11-14 20:59:09

+2

@ kermit666:不,他说他编辑了一个模板。模板不是Python源文件。 – 2013-11-14 21:01:56

5

为了增加knutin的回答,您所面临的问题,通过FetchFromCacheMiddleware恰好造成了如此,所有你需要做的是在settings.py文件禁用它,如下所示:

settings.py:

MIDDLEWARE_CLASSES = (
    ... 
    #'django.middleware.cache.FetchFromCacheMiddleware', 
    ... 
) 
0

我有一个类似的问题,但是我的模板需要运行一个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() 

在以下假设这个脚本的工作原理:

  1. 使用python3
  2. 这个脚本是沿侧放置manager.py
  3. manager.py可运行
  4. 该web应用程序被称为网站
  5. 该网站有一个名为网站/文件urls.py
  6. 你正在使用的GNU/Linux,它支持inotify的
0

该文件将从磁盘,而无需重新启动的runserver被读取,只要确定你禁用了所有的缓存。

禁用缓存模板加载器

缓存模板加载器默认情况下不启用,但你可能在你的生产设置中启用此。确保缓存的模板加载器未启用开发设置。 Django docs on the cached template loader

当您使用Django的缓存框架使用虚拟缓存框架

这可能会导致模板不重新加载。Django使用的默认框架是本地内存缓存,这意味着您必须显式设置虚拟缓存来禁用缓存框架。 Django docs on dummy caching

1

您不需要重新启动服务器来重新加载模板更改。

在生产中,你可以这样做:
settings.py中,对于模板配置
- 删除APP_DIRS设置
- 相反,该设置添加到选项:

'loaders': [ 
    'django.template.loaders.filesystem.Loader', 
    'django.template.loaders.app_directories.Loader', 
], 

为什么这个作品:
默认情况下,DEBUG设置为True(在开发模式下)。在这种模式下,Django不会缓存模板。但在生产模式下(即DEBUG = False),Django启用模板缓存。因此,需要重新启动服务器才能重新加载已编辑/已触摸的模板。

注意:
请注意,通过在生产计算机上禁用模板缓存,您将为每次通过的请求添加开销。

相关问题