次の Django プロジェクト レイアウトがあります。
project_folder/
app_folder/
static/
folder1/
file1
templates/
...
compressor -> (symlink to django_compressor app with my modifications)
__init__.py
manage.py
settings.py
urls.py
django_compressor のフォークで指定された templatetag から、次のことを行うクラスを呼び出しています。
class StorageMixin(object):
from django import VERSION as DJANGO_VERSION
if DJANGO_VERSION[:2] >= (1, 3):
from django.contrib.staticfiles.finders import find as _django_find
def _find_file_path(self, path):
return self._django_find(path)
else:
def _find_file_path(self, path):
static_roots = getattr(settings, 'STATIC_ROOTS', []) + [settings.COMPRESS_ROOT]
for root in static_roots:
filename = os.path.join(root, basename)
if os.path.exists(filename):
return filename
return None
そのため、django が新しいバージョンの場合、staticfiles ファインダーを使用しようとします。それ以外の場合は、STATIC_ROOTS 構成変数を介して基本的なファインダーを模倣します。
最後に、質問: 上記のフォルダー レイアウトを指定して、メソッドに渡し"folder1/file1"
ますfinders.find
。次の設定があります。
INSTALLED_APPS = (
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.messages',
'django.contrib.staticfiles',
'compressor',
'app_folder',
)
と
TEMPLATE_LOADERS = (
'django.template.loaders.filesystem.Loader',
'django.template.loaders.app_directories.Loader',
# 'django.template.loaders.eggs.Loader',
)
と私は電話から取得None
しfind
ます。
何か案は?
UPD。もっと奇妙な詳細:私は走った
python manage.py shell
そしてやった
from django.contrib.staticfiles.finders import find
find("folder1/file1")
そして、それは私に正しい結果を与えました...