7

これを邪魔にならないようにするために、可能であれば、アプリの静的フォルダー内のアプリの名前を持つディレクトリ内にすべてをネストせずにこれを実行したいので、冗長に感じます。それが唯一の方法であるなら、それは人生です。

使ってます:

STATICFILES_FINDERS = (
    'django.contrib.staticfiles.finders.FileSystemFinder',
    'django.contrib.staticfiles.finders.AppDirectoriesFinder',
)

と:

STATICFILES_STORAGE = 'pipeline.storage.PipelineCachedStorage'

これは、collectstaticの実行時にJSとSASSをコンパイルします。これらは両方ともAPP_ROOT/static/ディレクトリにあります。

唯一の「問題」は、すべてのソースsassファイルとjsファイルを一緒に持ってくることです。ある時点で、これをすべてS3にプッシュする予定ですが、可能であればそれを避けたいと思います。

実行すると、次のことがわかりました。

python manage.py collectstatic -i sass -i js

残りの「ソース」ファイルは除外したまま、指定したJSファイルとCSSファイルをコンパイルします。残念ながら、/ admin / js /などと一致するため、/ admin /内のすべてのjsファイルも無視されます。これがこの特定のプロジェクトで問題になる可能性があるかどうかさえわかりませんが、将来的には他のアプリで予測できます。私は間違いなくアプリに保持されている静的なjs/cssを含めたいと思います。

私がやりたいことは次のようなものです。

python manage.py collectstatic -i app_name/sass -i app_name/js

冒頭で述べたように、簡単な解決策は、django.contrib.adminと同じように、フォルダー内の静的ファイルの前にapp_name/を付けることです。ただし、この時点で、PROJECT_ROOT / app_name / static / app_name / [js | sass | img | data] /のディレクトリ構造になり、冗長性を回避できるはずです。

繰り返しになりますが、他のアプリとの競合を回避することを保証するために、おそらくそれが最良のオプションですか?

カスタムストレージとファインダーの作成を検討しましたが、自分で作成することは可能だと思います。最初にここをチェックして、これが他の誰かが解決した問題であるかどうかを確認したか、または圧倒的な応答がプレフィックスディレクトリを追加するだけであるかどうかを実際に確認したかったのです。

django.contrib.staticfiles.finders.AppDirectoriesFinderもし私が自分自身を転がすとしたら、私がたどると思う道は延長してオーバーライドするでしょうlist()。このアプローチが機能するかどうかはまだわかりません。collectstatic管理コマンドから状況がどのように進行するかをさらに追跡する必要があります。したがって、誰かがこれまたは同様のことを以前に行ったことがある場合、またはそれが機能する/機能しない理由を知っている場合は、助けが必要です。感謝。

ありがとう!

4

2 に答える 2

6

私は次のようにDjangoファインダーをサブクラス化することでこれを解決することができました:

PYTHON 2.X

from django.contrib.staticfiles import finders
from django.conf import settings


def add_ignores(ignore_patterns):
    ignore = settings.STATICFILES_FINDERS_IGNORE

    if ignore:
        if ignore_patterns:
            ignore_patterns.extend(ignore)
        else:
            ignore_patterns = ignore

    return ignore_patterns


class FileSystemFinderIgnore(finders.FileSystemFinder):
    def list(self, ignore_patterns):
        return super(FileSystemFinderIgnore, self).list(add_ignores(ignore_patterns))


class AppDirectoriesFinderIgnore(finders.AppDirectoriesFinder):
    def list(self, ignore_patterns):
        return super(AppDirectoriesFinderIgnore, self).list(add_ignores(ignore_patterns))


class DefaultStorageFinderIgnore(finders.DefaultStorageFinder):
    def list(self, ignore_patterns):
        return super(DefaultStorageFinderIgnore, self).list(add_ignores(ignore_patterns))

PYTHON 3.X

from django.contrib.staticfiles import finders
from django.conf import settings


def add_ignores(ignore_patterns):
    ignore = settings.STATICFILES_FINDERS_IGNORE

    if ignore:
        if ignore_patterns:
            ignore_patterns.extend(ignore)
        else:
            ignore_patterns = ignore

    return ignore_patterns


class FileSystemFinderIgnore(finders.FileSystemFinder):
    def list(self, ignore_patterns):
        return super().list(add_ignores(ignore_patterns))


class AppDirectoriesFinderIgnore(finders.AppDirectoriesFinder):
    def list(self, ignore_patterns):
        return super().list(add_ignores(ignore_patterns))


class DefaultStorageFinderIgnore(finders.DefaultStorageFinder):
    def list(self, ignore_patterns):
        return super().list(add_ignores(ignore_patterns))

そしてこれを私の設定に追加します:

STATICFILES_FINDERS_IGNORE = [
    '*.scss',
    '*.js',
]
于 2014-12-08T23:19:54.607 に答える
0

私は初めてですが、今はまさにこれを実行しているとdjango-pipeline信じています。pipeline.finders.FileSystemFinderpipeline.finders.AppDirectoriesFinder

https://django-pipeline.readthedocs.org/en/latest/storages.htmlの「収集した静的ファイルからPipelinableコンテンツを除外する場合」のセクションを参照してください。

また、1.5のソースコードから:

class AppDirectoriesFinder(PatternFilterMixin, DjangoAppDirectoriesFinder):
    """
    Like AppDirectoriesFinder, but doesn't return any additional ignored
    patterns.

    This allows us to concentrate/compress our components without dragging
    the raw versions in via collectstatic.
    """

これを書いている時点では、https://github.com/cyberdelia/django-pipeline/issues/418DEBUG==Trueを参照すると、圧縮/縮小されたコンテンツが空になることに注意してください。これはdjango-pipelineの将来のバージョンで修正されると思います。

于 2015-10-15T13:59:00.087 に答える