web-dev-qa-db-ja.com

Django静的ファイルが見つかりません。2つ目の目が必要です、私は夢中になります

Djangoは静的ファイルを提供しません。 errorが返されます。

[13/Jun/2014 06:12:09] "GET /refund/ HTTP/1.1" 200 2927
[13/Jun/2014 06:12:09] "GET /static/css/bootstrap.min.css HTTP/1.1" 404 1667
[13/Jun/2014 06:12:09] "GET /static/css/cover.css HTTP/1.1" 404 1643
[13/Jun/2014 06:12:09] "GET /static/js/bootstrap.min.js HTTP/1.1" 404 1661
[13/Jun/2014 06:12:09] "GET /static/assets/js/docs.min.js HTTP/1.1" 404 1667  
[13/Jun/2014 06:12:09] "GET /static/js/bootstrap.min.js HTTP/1.1" 404 1661
[13/Jun/2014 06:12:09] "GET /static/assets/js/docs.min.js HTTP/1.1" 404 1667

これが私のブートストラップの関連部分ですbase.html

!DOCTYPE html>
<html lang="en">
{% load static %}
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=Edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" content="">
<meta name="author" content="">
<link rel="shortcut icon" href="../../assets/ico/favicon.ico">

<title>Cover Template for Bootstrap</title>

<!-- Bootstrap core CSS -->
{
<link href="{% static "css/bootstrap.min.css"%}" rel="stylesheet">

<!-- Custom styles for this template -->
<link href="{% static "css/cover.css" %}" rel="stylesheet">

settings.pyからの関連コード(注:テンプレートは問題なく動作しました。)

TEMPLATE_DIRS = (
    os.path.join(BASE_DIR, 'templates'),
)

STATIC_URL = '/static/'

STATIC_ROOT = ''

そして、これが私のDjangoプロジェクトのレイアウト方法です。

  • 管理者
  • db.sqlite3
  • プロジェクト名
  • manage.py
  • アプリ名
  • 静的
    • css
      • ...
    • dist
      • ...
  • テンプレート
    • base.html

少しでも助けていただければ幸いです。私は何が間違っていたのかわからない、私は何百万回もコードを見てきましたが、Djangoが静的ファイルを提供する方法についての私の理解には明らかにギャップがあるはずですが、私は以前に問題なくこれを行いました。

18
CowardlyFrench

以下をせよ:

  1. デバッグ中の場合は、settings.pyでSTATICFILES_DIRS =( "path/to/static")変数を設定します。次に、デバッグモードでonlyが機能するはずです。

  2. デプロイモードでも機能させるには、settings.pyでSTATIC_ROOT =( "path/to/static_root")変数を設定します。次に、python manage.py collectstaticを実行すると、正常に機能するはずです。

そして今、Djangoが静的ファイルを管理する方法をよりよく理解するために:

  • Djangoには、静的ファイルを探して収集するための定義済みの場所がいくつかあります。settings.pyのSTATICFILES_FINDERSでそれらを見つける場所を指定します。デフォルトでは、静的フォルダーinsideアプリを探します。 Djangoに、STATICFILES_DIRS変数(パスまたはパスのタプル)を設定して、他の部分で静的ファイルを探すように指示できます。

  • DEBUGモードでは、静的ファイルはこのパスから選択されます(ファイルを収集するstatic_rootからではありません)。

  • python manage.py collectstaticを実行すると、Djangoは静的ファイルが見つかるすべてのディレクトリを通過し、それらを静的ルートに配置します。デプロイモードで実行すると、静的ファイルはこのディレクトリ。

PS:私が通常行うことは、commonというアプリを作成し、内部に静的ディレクトリを作成して、プロジェクト(およびテンプレート)のすべての一般的なcss、jsを配置することです。このように、STATICFILES_DIRS変数を指定する必要はありません。

それが今明らかであることを願っています=)。

38
argaen

さて、チュートリアルを進めてみると、この問題にかなり悩まされました。 Webサービスを再起動するだけで修正されました。したがって、チュートリアルの指示を完了するだけの場合は、ディレクトリstatic // style.cssをdirという名前のディレクトリ内に置き、

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

そのcssファイルで設計する必要があるhtmlファイルのヘッドセクション内(例:index.html)。

4
efi

Settings.pyのSTATIC_ROOTを変更します。うまくいくと思います。私も同じ問題に直面しています...

TEMPLATE_DIRS = (
    os.path.join(BASE_DIR, 'templates'),
)
STATICFILES_DIRS = (
     os.path.join(BASE_DIR, 'static'),
)
STATIC_ROOT = os.path.join(os.path.dirname(BASE_DIR), 'static')

STATIC_URL = '/static/'
2
Jahir islam