当更少文件被修改时,Django运行bash脚本

时间:2012-11-28 14:01:09

标签: python django less

我编写了使用lessc将* .less文件转换为* .css的bash脚本。 不幸的是,当修改* .py文件时,BaseRunserverCommand的运行功能仅重启服务器。 我该如何解决这个问题?

2 个答案:

答案 0 :(得分: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

但是,您自己的*.less实例需要仅覆盖code_changed() function,以便同时考虑*.css和{{1}}(或更多)文件。

答案 1 :(得分: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

塔德克,谢谢您的线索:)

我想通过编辑BaseCommand.option_list

也可以解决这个问题