在我的项目中,我有一个主静态文件夹和一个名为static的子文件夹。当我在名为static(在设置文件中的COLLECTSTATIC_DIRS中指定)的子文件夹中进行更改时,我保存了文件并运行collectstatic命令。
这成功保存了更改,但是由于我在项目内部不断更改css和Javascript文件(我将它们存储为静态文件)的情况下,效率真的很低。
我浏览了网络,发现了一个名为whitenoise的解决方案,它是一个pip程序包。但是此程序包只能在很短的时间内使用,并且在关闭和打开我的项目文件夹几次后,它完全停止了工作。
有人有其他解决此问题的方法吗?谢谢。
答案 0 :(得分:0)
您可以使用不属于Django的第三方解决方案来监视文件并在文件更改时运行命令。
看看fswatch
实用程序Bash Script - fswatch trigger bash function
请检查有关https://docs.djangoproject.com/en/3.0/howto/static-files/的详细信息,什么是Django方法才能纠正:)
答案 1 :(得分:0)
首先在进行开发时设置DEBUG = True
。
然后将这些行添加到项目的urls.py:
from django.conf import settings
from django.views.decorators.cache import cache_control
from django.contrib.staticfiles.views import serve
from django.conf.urls.static import static
if settings.DEBUG:
urlpatterns += static(settings.STATIC_URL,
view=cache_control(no_cache=True, must_revalidate=True)(serve))
答案 2 :(得分:0)
您可以使用 python-watchdog 并编写您自己的 Django 命令:
import time
from django.conf import settings
from django.core.management import call_command
from django.core.management.base import BaseCommand
from watchdog.events import FileSystemEventHandler
from watchdog.observers import Observer
class Command(BaseCommand):
help = "Automatically calls collectstatic when the staticfiles get modified."
def handle(self, *args, **options):
event_handler = CollectstaticEventHandler()
observer = Observer()
for path in settings.STATICFILES_DIRS:
observer.schedule(event_handler, path, recursive=True)
observer.start()
try:
while True:
time.sleep(1)
finally:
observer.stop()
observer.join()
class CollectstaticEventHandler(FileSystemEventHandler):
def on_moved(self, event):
super().on_moved(event)
self._collectstatic()
def on_created(self, event):
super().on_created(event)
self._collectstatic()
def on_deleted(self, event):
super().on_deleted(event)
self._collectstatic()
def on_modified(self, event):
super().on_modified(event)
self._collectstatic()
def _collectstatic(self):
call_command("collectstatic", interactive=False)