只要意識到您可以輕鬆地重寫命令,就像使用具有相同名稱的命令創建應用程序一樣。
因此,我創建了一個應用程序並創建一個與runserver同名的文件,稍後擴展runserver基類以在運行之前添加新功能。
例如,我想在運行服務器啓動之前運行命令$ compass watch,並使其保持runserver執行狀態。
"""
Start $compass watch, command when you do $python manage.py runserver
file: main/management/commands/runserver.py
Add ´main´ app to the last of the installed apps
"""
from optparse import make_option
import os
import subprocess
from django.core.management.base import BaseCommand, CommandError
from django.core.management.commands.runserver import BaseRunserverCommand
from django.conf import settings
class Command(BaseRunserverCommand):
option_list = BaseRunserverCommand.option_list + (
make_option('--adminmedia', dest='admin_media_path', default='',
help='Specifies the directory from which to serve admin media.'),
make_option('--watch', dest='compass_project_path', default=settings.MEDIA_ROOT,
help='Specifies the project directory for compass.'),
)
def inner_run(self, *args, **options):
self.compass_project_path = options.get('compass_project_path', settings.MEDIA_ROOT)
self.stdout.write("Starting the compass watch command for %r\n" % self.compass_project_path)
self.compass_pid = subprocess.Popen(["compass watch %s" % self.compass_project_path],
shell=True,
stdin=subprocess.PIPE,
stdout=self.stdout,
stderr=self.stderr)
self.stdout.write("Compas watch process on %r\n" % self.compass_pid.pid)
super(Command, self).inner_run(*args, **options)
這工作得很好。
看https://docs.djangoproject.com/en/dev/howto/custom-management-commands/關於Django的更多細節命令
希望有人發現這是很有幫助的
使用此命令你有任何靜態問題?我不知道爲什麼,但是即使有空的inner_run函數(僅在調用了supper inner_run時),statics也不會被加載。他們都得到了404。 –
@ts_pati查看我的答案,下面介紹靜態文件的情況。 – Wtower
來自[django 1.9文檔](https://docs.djangoproject.com/en/1.9/ref/settings/)的注意事項: 當多個應用程序提供相同資源的不同版本時(模板,靜態文件,管理命令,翻譯),首先在INSTALLED_APPS中列出的應用程序具有優先權。 編輯:@Wtower在下面的回答中提到了這個 – msnider