2012-11-28 73 views
1

我編寫了使用lessc將* .less文件轉換爲* .css的bash腳本。 不幸的是,運行來自BaseRunserverCommand的函數只在* .py文件被修改時重新啓動服務器。 我該如何解決這個問題?Django在修改較少文件時運行bash腳本

+0

它不是一個答案來也解決了,但你考慮使用Django-Compressor(它包含此功能) – YardenST

回答

1

正確覆蓋code_changed()功能似乎有點困難,所以我決定編寫自己的腳本轉換* .less文件,這些文件被修改或沒有* .css文件。 此腳本在運行reloader_thread()

import sys, time 
from subprocess import call 

from django.conf import settings 
from django.utils import autoreload 

from django.core.management.commands.runserver import Command 

def convert_less(): 
    status = call([settings.CONVERT_LESS, settings.LESS_DIR, settings.CSS_DIR]) 
    if status != 0: 
     exit(1) 

def reloader_thread(): 
    autoreload.ensure_echo_on() 
    while autoreload.RUN_RELOADER: 
     convert_less() 
     if autoreload.code_changed(): 
      sys.exit(3) # force reload 
     time.sleep(1) 

autoreload.reloader_thread = reloader_thread 

Tadeck,感謝您的線索:)

我想,這個問題可以通過編輯BaseCommand.option_list

2

您可以編寫自己的命令從django.core.management.commands.runserver.Command繼承,覆蓋run()方法與自己的,它會用自己的autoreload

def run(self, *args, **options): 
    """ 
    Runs the server, using the autoreloader if needed 
    """ 
    use_reloader = options.get('use_reloader') 

    if use_reloader: 
     autoreload.main(self.inner_run, args, options) 
    else: 
     self.inner_run(*args, **options) 

你自己的autoreload實例,但是,將只需要code_changed() function來重寫考慮到*.less*.css(或更多)文件。