web-dev-qa-db-ja.com

Django静的ファイル404

静的ファイルを取得できません。さまざまな設定やディレクトリ構成などを試しましたが、それらは404として表示されます。 debug_toolbarがインストールされているため、STATIC_URLがリクエストコンテキストに到達していることがわかります。

/ staticを示すディレクトリ構造(試してみるために、食事アプリフォルダー内のディレクトリとユーザーも配置しました。

/mealmate
    /mealmate
    /meals
    /static
        /css
             /bootstrap.min.css
    /templates
    /users

Settings.py(私は他のさまざまな設定を試しましたが、いくつかの重要な設定):

MEDIA_ROOT = os.path.join(PROJECT_PATH, 'media/')

STATIC_URL = '/static/'

INSTALLED_APPS = (
    'Django.contrib.auth',
    'Django.contrib.contenttypes',
    'Django.contrib.sessions',
    'Django.contrib.sites',
    'Django.contrib.messages',
    'Django.contrib.staticfiles',
)

WSGI_APPLICATION = 'mealmate.wsgi.application'

Base.htmlでレンダリング

    <link rel="stylesheet" href="/static/css/bootstrap.min.css">

何か案は?ありがとう

60
KindOfGuy

これは、Django for Windowsでのstatic/media/templateアクセスの有効なソリューションです。

settings.py

import os.path

STATIC_ROOT = ''

STATIC_URL = '/static/'

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

私にとってこれは、settings.pyでdebugをfalseに設定することによって引き起こされることが判明しました。回避策は--insecureスイッチをrunserverに渡すことですが、実際の解決策は適切なWebサーバーを使用して静的ファイルを提供することです。詳細については、 この質問 への回答を参照してください。

26
Arthur Tacca

これをWebサーバーで実行している場合、静的ファイルをアクセス可能なパブリックフォルダーにコピーしていますか?例えば:

# web accessible folder
STATIC_ROOT = '/home/your_name/www/mealmate/static/'

# URL prefix for static files.
STATIC_URL = '/static/'

# Additional locations of static files
STATICFILES_DIRS = (
    # location of your application, should not be public web accessible 
    '/home/your_name/website/mealmate/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 static Files を使用して、manage.pyを使用して静的ファイルをパブリックアクセス可能なフォルダーにコピーできます。

# --link    Create a symbolic link to each file instead of copying.
# --noinput Do NOT Prompt the user for input of any kind.
#
python manage.py collectstatic -link --noinput

お役に立てば幸いです!

21
eodgooch

また、Apacheが静的ディレクトリへのリクエストをブロックしたことに気付くまで、404の問題に巻き込まれました。 python manage.py collectstaticを使用して、すべての静的ファイルをプロジェクトルートの下のstatic dir、つまり/ var/my/site/staticにコピーしました。と

Alias /static /var/my/site/static
<Directory /var/my/site/static>
        Require all granted
</Directory>

/ etc/httpd/conf/httpd.confで、正常に動作するようになりました。

上記の答えがどれもうまくいかない場合は、サーバー構成を確認することを検討してください。

5
Darwin

私は単に同等のものを追加しました

STATICFILES_DIRS = (
    '/absolute_path_to_project/mealmate/static',
)

これを機能させるために。もちろん、absolute_path_to_project実際のパスを入力し、必要に応じてドライブ文字を追加します。

5
Seth

食事仲間がINSTALLED_APPSに含まれていることを確認してください

4
chrisortman

上記のコメントから-これを実行する

python manage.py findstatic --verbosity 2 css/styles.css

「css/styles.css」に一致するファイルが見つかりません。

次の場所を探します。
/Users/yourname/Documents/Workspace/test/staticfiles

staticフォルダーの名前をstaticfilesに変更しただけで、すべてうまくいきました。 (私はosx + Django 1.x)を使用しています

ローカルのデベロッパーボックスを使用している場合、安全でないモードを使用しても問題はありません。そうでない場合、404エラーが発生する可能性があります。

python manage.py runserver --insecure

更新

実際にsettings.pyを掘り下げて、侵害ラインを見つけました。

STATICFILES_DIRS = (
    os.path.join(BASE_DIR, 'staticfiles'),
)
3
johndpope

in Djangoテンプレートにはもう1つの利点があります。これは、このような静的変数をリンクでき、おそらくこれがあなたの問題です!

<script src="{% static 'myapp/bootstrap.min.js' %}"></script>
<link href="{% static 'myapp/bootstrap.css' %}" rel="stylesheet" type="text/css"/>

使用する方が良い

{%static 'filename'%}

また、そのことをより簡単に知るために、 https://docs.djangoproject.com/en/1.11/intro/tutorial06/ を参照します。

2
Ebrahim Karimi

ここでDjango1.3 +を使用していると仮定しています。

最初に、さらにいくつかの設定を定義する必要があります。

STATICFILES_FINDERS = [
    'Django.contrib.staticfiles.finders.FileSystemFinder',
    'Django.contrib.staticfiles.finders.AppDirectoriesFinder',
]

STATICFILES_DIRS = [
    path.join(TOP_DIR, 'static'),
]

STATIC_ROOT = path.join(TOP_DIR, 'staticfiles')
STATIC_URL = '/static/'

これは、そのディレクトリを見つけるのに役立ちます。

また、STATIC URLを使用して常に静的ファイルにアクセスする必要があります。

<link rel="stylesheet" href="{{ STATIC_URL }}css/bootstrap.min.css">
2
drewman

私の場合、サーバーを再実行するだけで済みました。

python manage.py runserver
0
Davor Josipovic

Settings.pyファイルにアプリINSTALLED_APPSを入れ忘れたと思うので、「mealmate」を追加する必要があります

INSTALLED_APPS = (
    'mealmate',
    'Django.contrib.auth',
    'Django.contrib.contenttypes',
    'Django.contrib.sessions',
    'Django.contrib.sites',
    'Django.contrib.messages',
    'Django.contrib.staticfiles',
)

その後、静的ファイルとコマンドファイルがDjangoに表示されます。私はコマンドに問題があり、これが私が修正した方法です。

0
Omar Alvarado