1

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

4

2 回答 2

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()函数以考虑也*.less*.css(或更多)文件。

于 2012-11-28T14:09:50.963 回答
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来解决

于 2012-12-01T20:59:17.453 回答