102

この問題に関するいくつかの投稿を見ましたが、解決策が見つかりませんでした。

Django1.3開発環境内で静的ファイルを提供しようとしています。

これが私の設定です

...
STATIC_ROOT = '/home/glide/Documents/django/cbox/static/'
STATIC_URL = '/static/'
STATICFILES_DIRS = (
  '/static/',
)
...

私のurls.py

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

私の/home/ glide / Documents / django / cbox /static/ディレクトリは次のようなものです

css
  main.css
javascript
image

http://127.0.0.1:8000/static/css/main.cssにアクセスしようとすると404エラーが発生します。

css、javascript、画像のパターンを個別に指定する必要がありますか?

4

15 に答える 15

131

STATIC_ROOTSTATICFILES_DIRSを混同しました

実際、私はSTATIC_ROOTの有用性を本当に理解していませんでした。共通ファイルを置かなければならないディレクトリだと思いました。このディレクトリは本番用に使用されます。これは、collectstaticによって静的ファイルが配置(収集)されるディレクトリです

STATICFILES_DIRSは私が必要としているものです。

私は開発環境にいるので、解決策はSTATIC_ROOTを使用せず(または別のパスを指定)、共通ファイルディレクトリをSTATICFILES_DIRSに設定することです。

#STATIC_ROOT = (os.path.join(SITE_ROOT, 'static_files/'))
import os
SITE_ROOT = os.path.dirname(os.path.realpath(__file__))
STATICFILES_DIRS = (
  os.path.join(SITE_ROOT, 'static/'),
)

また、忘れないでくださいfrom django.conf import settings

于 2011-05-16T09:58:00.647 に答える
40

問題を引き起こす原因は2つだけsettings.pyです。

1)STATIC_URL = '/static/'

2)

STATICFILES_DIRS = (
    os.path.join(BASE_DIR, "static"),
)

静的ファイルは、プロジェクトの設定ファイルと同じディレクトリにある静的ディレクトリの下にある必要があります。

それでも、静的ファイルがロードされていない場合は、理由は、保持している可能性があります

DEBUG = False

Trueに変更します(厳密には開発のみ)。本番STATICFILES_DIRS環境では、静的ファイルが存在するパスに変更するだけです。

于 2015-06-15T07:21:08.003 に答える
40

静的ファイルの提供は、いくつかの方法で実現できます。これが私の自己メモです:

  • static/my_app/にディレクトリを追加しmy_appます(以下の名前空間に関する注記を参照)
  • 新しいトップレベルディレクトリを定義し、それをsettings.pyのSTATICFILES_DIRSに追加します(注意してくださいThe STATICFILES_DIRS setting should not contain the STATIC_ROOT setting

私は最初の方法と、ドキュメントで定義されている方法に近い設定を好みます。そのため、ファイルを提供しadmin-custom.cssていくつかの管理スタイルをオーバーライドするために、次のような設定を行います。

.
├── my_app/
│   ├── static/
│   │   └── my_app/
│   │       └── admin-custom.css
│   ├── settings.py
│   ├── urls.py
│   └── wsgi.py
├── static/
├── templates/
│   └── admin/
│       └── base.html
└── manage.py
# settings.py
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
STATIC_URL = '/static/'

これは、次のようにテンプレートで使用されます。

# /templates/admin/base.html
{% extends "admin/base.html" %}
{% load static %}

{% block extrahead %}
    <link rel="stylesheet" href="{% static "my_app/admin-custom.css" %}">
{% endblock %}

開発中にdjango.contrib.staticfiles[ed:デフォルトでインストール]を使用する場合、DEBUGがTrueに設定されているとrunserverによって自動的に実行されます[...]

https://docs.djangoproject.com/en/1.10/howto/static-files/

デプロイするとき、collectstaticnginxで静的ファイルを実行して提供します。


私のすべての混乱を解消したドキュメント:

STATIC_ROOT

collectstaticがデプロイメント用の静的ファイルを収集するディレクトリへの絶対パス。

...静的ファイルを永続的に保存する場所ではありません。これは、staticfilesのファインダーによって検出されるディレクトリ(デフォルトでは「static /」アプリサブディレクトリおよびSTATICFILES_DIRSに含めるディレクトリ)で行う必要があります。

https://docs.djangoproject.com/en/1.10/ref/settings/#static-root


静的ファイルの名前空間

これで、静的ファイルを(別のmy_appサブディレクトリを作成するのではなく)my_app / static /に直接配置することで解決できる可能性がありますが、実際には悪い考えです。Djangoは、名前が一致する最初の静的ファイルを使用します。別のアプリケーションに同じ名前の静的ファイルがある場合、Djangoはそれらを区別できません。Djangoを正しいものに向けることができる必要があります。これを確実にする最も簡単な方法は、名前空間を使用することです。つまり、これらの静的ファイルを、アプリケーション自体の名前が付けられた別のディレクトリ内に配置します。

https://docs.djangoproject.com/en/1.10/howto/static-files/


STATICFILES_DIRS

プロジェクトには、特定のアプリに関連付けられていない静的アセットも含まれている可能性があります。アプリ内でstatic/ディレクトリを使用することに加えて、Djangoが静的ファイルを検索する設定ファイルにディレクトリのリスト(STATICFILES_DIRS)を定義できます。

https://docs.djangoproject.com/en/1.10/howto/static-files/

于 2016-07-15T04:26:17.057 に答える
11

静的URLが正しいが、それでも:

見つかりません:/static/css/main.css

おそらくあなたのWSGIの問題です。

➡ConfigWSGIは、開発環境と本番環境の両方に対応します

==========================project/project/wsgi.py==========================

import os
from django.conf import settings
from django.contrib.staticfiles.handlers import StaticFilesHandler
from django.core.wsgi import get_wsgi_application

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'project.settings')
if settings.DEBUG:
    application = StaticFilesHandler(get_wsgi_application())
else:
    application = get_wsgi_application()
于 2019-03-31T04:35:55.153 に答える
7
  1. STATIC_ROOT行を削除できます
  2. staticまたは、別のディレクトリに別のフォルダを作成することもできます。ディレクトリが次のようになっているとします。project\static 次に更新します。
    STATICFILES_DIRS = [
        os.path.join(BASE_DIR, 'project/static/')
    ]
    STATIC_ROOT = os.path.join(BASE_DIR, 'static')

あなたが何をするにしても、要点は同じディレクトリを含むべきではSTATICFILES_DIRSありません。STATIC_ROOT

久しぶりですが、新しい仲間が助けてくれることを願っています

于 2019-10-15T12:37:21.253 に答える
5

別のエラーは、次のINSTALLED_APPSようなリストにアプリがリストされていない可能性があります。

INSTALLED_APPS = [
    # ...
    'your_app',
]

それがないと、静的ファイル、基本的にはアプリに関連するすべてのファイルが検出されないなどの問題に直面する可能性があります。正解で提案されているように、次を使用して正しくすることができますが、

STATICFILES_DIRS = (adding/path/of/your/app)

エラーの1つである可能性があり、このエラーが発生した場合は確認する必要があります。

于 2017-01-04T19:47:49.990 に答える
4

STATICFILES_DIRS開発本番STATIC_ROOTで 使用されます、

STATICFILES_DIRSSTATIC_ROOT同じフォルダ名を使用しない でください。

開発と本番環境でまったく同じ静的フォルダーを使用する必要がある場合は、この方法を試してください

これを含める settings.py

import socket

HOSTNAME = socket.gethostname()

# if hostname same as production url name use STATIC_ROOT 
if HOSTNAME == 'www.example.com':
    STATIC_ROOT = os.path.join(BASE_DIR, "static/")

else:
    STATICFILES_DIRS = [
            os.path.join(BASE_DIR, 'static/'),
        ]
于 2020-05-14T07:51:38.863 に答える
3

INSTALLED_APPSにプロジェクト名を追加することで、この問題を解決します。ここに画像の説明を入力してください

于 2020-09-29T20:27:01.290 に答える
2

cmd typeコマンド python manage.py findstatic --verbosity 2 static で、Djangoが静的ファイルを探しているディレクトリが表示されます。仮想環境を作成した場合は、このvirtual_environment_nameフォルダー内に静的フォルダーがあります。 VIRTUAL_ENVIRONMENT_NAME\Lib\site-packages\django\contrib\admin\static。上記の「findstatic」コマンドを実行すると、Djangoがこのパスを表示した場合は、すべての静的ファイルをこの静的ディレクトリに貼り付けます。HTMLファイルでhrefにJINJA構文を使用し、他のインラインcssを確認します。JINJA構文を指定した後も画像のsrcまたはurlが存在する場合は、その前に「/static」を付けます。これは私のために働いた。

于 2020-04-29T14:43:21.100 に答える
2
TEMPLATE_DIR=os.path.join(BASE_DIR,'templates')
STATIC_DIR=os.path.join(BASE_DIR,'static')

STATICFILES_DIRS=[STATIC_DIR]
于 2020-10-05T13:53:26.880 に答える
1

DEBUGローカル設定の設定を移動して、デフォルト値で上書きすることがわかりましたFalseDEBUGおよびを使用して開発している場合は、基本的にDEBUG設定が実際にfalseであることを確認してくださいrunserver

于 2019-06-20T18:45:14.933 に答える
1

settings.pyには次のものが含まれている可能性があります。

TEMPLATES = [
{
'BACKEND':'django.template.backends.django.DjangoTemplates'、

'DIRS':["templates"]、

'APP_DIRS':True、

'OPTIONS':{
#...ここにいくつかのオプション.. 。
}、
}、]

また

STATIC_URL ='/ static /'

また

STATICFILES_DIRS =(os.path.join(BASE_DIR、 "static")、)

于 2020-12-02T22:57:24.000 に答える
1

ファイルの最後にあるDjangoの2つのことを常に覚えておいてくださいsettings.py

開発用

STATIC_URL = '/static/'

生産用

STATIC_ROOT = '/static/'

settings.py開発環境で作業しているので、ファイルから他の2つのパスをコメントアウトします

#STATIC_ROOT = '/home/glide/Documents/django/cbox/static/'
STATIC_URL = '/static/'
#STATICFILES_DIRS = (
#  '/static/',
#)

そして、次のurls.pyように変更を加えます

urlpatterns = patterns('',
...
  url(r'^static/(?P<path>.*)$', 'django.views.static.serve',
    {'document_root', settings.STATIC_URL}
  ),
...
);

これが問題を解決するかもしれないことを願っています

于 2021-03-04T15:30:27.563 に答える
0

モジュールを追加した場合django-storages(たとえば、djangoアプリでS3へのファイルのアップロードをサポートするため)、私のようにこのモジュールのドキュメントをsettings.py正しく読んでいない場合は、 :からこの行を削除してください。

STATICFILES_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage'

そうしないと、静的アセットがローカルマシンではなく、管理パネルCSSを含むS3バケットでリモートに表示され、管理パネルCSSが効果的に破壊されます。

于 2020-05-02T10:00:09.300 に答える
-1

{'document_root', settings.STATIC_ROOT}する必要があります {'document_root': settings.STATIC_ROOT}

または、次のようなエラーが発生します dictionary update sequence element #0 has length 6; 2 is required

于 2016-04-07T13:17:06.007 に答える