9

この質問が何度も聞かれたことは知っていますが、私が見つけて試した回答はどれも役に立ちませんでした。

これらは私の静的ファイルの設定です:

STATIC_ROOT = os.path.abspath(SETTINGS_PATH+'/staticfiles/')

# URL prefix for static files.
# Example: "http://media.lawrence.com/static/"
STATIC_URL = '/staticfiles/'

# Additional locations of static files
STATICFILES_DIRS = (
    # Put strings here, like "/home/html/static" or "C:/www/django/static".
    # Always use forward slashes, even on Windows.
    # Don't forget to use absolute paths, not relative paths.
    os.path.join(os.path.dirname(__file__), 'static'),
    )

# List of finder classes that know how to find static files in
# various locations.
STATICFILES_FINDERS = (
    'django.contrib.staticfiles.finders.FileSystemFinder',
    'django.contrib.staticfiles.finders.AppDirectoriesFinder',
#    'django.contrib.staticfiles.finders.DefaultStorageFinder',
) 

そして myapp/urls.py で:

from django.conf.urls import patterns, include, url
from django.conf import settings
from django.contrib import admin
from django.contrib.staticfiles.urls import staticfiles_urlpatterns

admin.autodiscover()

urlpatterns = patterns('',
    # urls
)

urlpatterns += staticfiles_urlpatterns()

Collectstatic は、必要に応じてすべてのファイルを staticfiles/ にコピーし、すべての静的ファイルで 404 を取得します。

私もurls.pyでこれを試しました:

if not settings.DEBUG:
    urlpatterns += patterns('',
        url(r'^staticfiles/(?P<path>.*)$', 'django.views.static.serve',
            {'document_root': settings.STATIC_ROOT}),
    )

これにより、次のようなエラーが発生します。

Resource interpreted as Stylesheet but transferred with MIME type text/html:  "http://localhost:8000/?next=/staticfiles/css/bootstrap.css". localhost:11
Resource interpreted as Stylesheet but transferred with MIME type text/html: "http://localhost:8000/?next=/staticfiles/css/style.css". localhost:12
Resource interpreted as Script but transferred with MIME type text/html: "http://localhost:8000/?next=/staticfiles/js/bootstrap.js". localhost:79
Resource interpreted as Script but transferred with MIME type text/html: "http://localhost:8000/?next=/staticfiles/js/login.js". 

設定の何が問題なのかわかりません。どんなアイデアでも大歓迎です。

4

6 に答える 6

15

docsの警告ボックスにあるように、実稼働環境 (つまりdebug=False) では、django ではなく Web サーバーを使用して静的ファイルを提供する必要があります。そのため、staticfilesは次の場合にアセットの提供を拒否しますdebug=False

于 2012-12-10T13:37:20.927 に答える
7

ルート urls.py で以下のコードを使用しています。静的およびメディアを django 開発サーバーで提供する場合は、設定ファイルで FORCE_SERVE_STATIC を True に設定する必要があります。また、collectstatic コマンドを実行して静的ファイルを更新することを忘れないでください。

from django.conf.urls.static import static
from django.conf import settings

<...>

if settings.DEBUG:
    urlpatterns += static(
        settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
elif getattr(settings, 'FORCE_SERVE_STATIC', False):
    settings.DEBUG = True
    urlpatterns += static(
        settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
    urlpatterns += static(
        settings.STATIC_URL, document_root=settings.STATIC_ROOT)
    settings.DEBUG = False
于 2015-05-03T17:10:04.127 に答える
0

デバッグをオフにすると、Django は静的ファイルを提供しなくなります。運用 Web サーバー (Apache、Heroku、Pythonanywhere など) がそれを処理する必要があります。

于 2019-06-13T20:52:19.880 に答える