2010-12-01 136 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啓用模板緩存。因此,需要重新啓動服務器才能重新加載已編輯/已觸摸的模板。

注意:
請注意,通過在生產計算機上禁用模板緩存,您將爲每次通過的請求添加開銷。

相關問題