web-dev-qa-db-ja.com

Djangoは静的ファイルを提供しておらず、404エラーが発生しています

テンプレートから静的ファイルを読み込めないようです。私は公式ドキュメントに従いましたが、何かが足りないに違いありません。

私のディレクトリレイアウト(Djangoによって生成され、ほとんどのファイルは省略されています):

myproject
  myproject
    settings.py
    urls.py
  static
    css
      bootstrap.css
      main.css
  templates
    base.html
  myapp1
  myapp2
  ...
  manage.py

私のsettings.py

STATIC_URL = 'static/'

私は(私のテンプレートから)そのように私のスタイルシートを参照しています:

{% load staticfiles %}
<link rel="stylesheet" href="{% static "css/bootstrap.css" %}" type="text/css">
<link rel="stylesheet" href="{% static "css/style.css" %}" type="text/css"> 

これは(HTMLで)レンダリングされるとこれを与えます:

<link rel="stylesheet" href="static/css/bootstrap.css" type="text/css">
<link rel="stylesheet" href="static/css/style.css" type="text/css"> 

しかし、これらのリンクは実際にはどこにもつながりません(私がそれらにアクセスすると、Djangoから404エラーが発生します)。 urls.pyに何かを追加することでこれを修正できると思いますが、サーバーの実行時にDjangoこれは自動的に行われたと思いましたか?何が欠けていますか?

13
n0pe

静的ファイルディレクトリをsettings.pyで定義しましたか?

インストールされているアプリに'Django.contrib.staticfiles',が含まれていると思います。

静的ファイルのディレクトリを定義していない場合は、次のようにすることができます。

import os.path

PROJECT_ROOT = os.path.abspath(os.path.dirname(__file__))

STATICFILES_DIRS = (
    os.path.join(PROJECT_ROOT, 'static'),
)
23
slow_mondays

これは、Windowsの場合Django、

settings.py

import os.path

STATIC_ROOT = ''

STATIC_URL = '/static/'

STATICFILES_DIRS = (
    os.path.join('static'),
)
3
Amar Kamthe

私の問題は、settings.pyファイルに「STATICFILES_DIRS」を追加することで解決しました

STATIC_URL = '/static/'
STATICFILES_DIRS = ( os.path.join('static'), )
3

STATICFILES_FINDERSsettings.pyで定義されているかどうかを確認します

https://docs.djangoproject.com/en/dev/ref/contrib/staticfiles/#std:setting-STATICFILES_FINDERS

デフォルト値のSTATICFILES_FINDERSで十分ですが、2つの選択肢があります。

  • アプリ内に静的ファイルがあり、このアプリがINSTALLED_APPSにある必要があります

  • または、動作がSTATICFILES_DIRSのいずれかであると予想される場合は、静的ファイルへのパスを使用してDjango.contrib.staticfiles.finders.FileSystemFinderを定義する必要があります。

1
Rach

Djangoサーバーを実行すると、これは自動的に行われましたか?

どうしてそう思ったの?公式ドキュメントに従っている場合は、それを見つけることはできません。開発でそれらを提供するためにあなたがしなければならないことを読んでください ここ

別の問題があります。 STATIC_URLは相対リンクであるため、ブラウザは既存のページURLに追加します。したがって、/fooページを表示している場合、'static/css/style.css'/foo/static/css/style.css'と評価されます。

/-つまり/static/-で始まるか、完全なURL(つまりhttp://myserver.com/static/)であることを確認してください。

1
Daniel Roseman

私もこの問題に遭遇しました。そして、私は次のようにhrefを修正することで問題を解決しました:

<html>
<link rel="stylesheet" href="{{STATIC_URL}}css/bootstrap.css" type="text/css">
<link rel="stylesheet" href="{{STATIC_URL}}css/style.css" type="text/css"> 
</html>
0
user3489965