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()関数は少し難しいように思われたので、変更された、または*.cssファイルがない*.lessファイルを変換する独自のスクリプトを作成することにしました。このスクリプトは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 に答える