質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

1回答

3515閲覧

DjangoのStatic設定について

al_aya_yuka

総合スコア98

Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2017/08/21 12:27

###前提・実現したいこと
DjangoでStaticの設定をしたいです。
具体的にはCSSにアクセスし、読み込みができるようにしたいです。
そこで、いろいろなチュートリアルや、ドキュメントを一応は参照させていただいたのですが、どうやっても404になってしまい、アクセスできません。
何が悪いでしょうか。

###該当のソースコード
settings.py
標準のまま特に変えてません。

python

1# Static files (CSS, JavaScript, Images) 2# https://docs.djangoproject.com/en/1.11/howto/static-files/ 3 4STATIC_URL = '/static/'

ファイル構造
とにかく目的のCSSをばらまいてみました。

bash

1# pwd 2/opt/oth 3# find -type f 4./manage.py 5./oth/wsgi.py 6./oth/__init__.py 7./oth/settings.py 8./oth/style.css 9./oth/static/style.css 10./oth/static/common/css/style.css 11./oth/static/common/style.css 12./oth/urls.py 13./style.css 14./static/style.css 15./static/common/css/style.css 16./static/common/style.css

###試したこと
どんなURLだったらアクセスできるのか?
{% static }で生成されるであろうURL(もちろん実際に生成されたURLも含みます)を作成し、curlコマンドにして実行してみました。

bash

1$ cat style_access 2curl -o /dev/null -w '%{http_code}\n' -s http://appserver/static/style.css 3curl -o /dev/null -w '%{http_code}\n' -s http://appserver/static/common/style.css 4curl -o /dev/null -w '%{http_code}\n' -s http://appserver/static/common/css/style.css 5curl -o /dev/null -w '%{http_code}\n' -s http://appserver/static/css/style.css 6curl -o /dev/null -w '%{http_code}\n' -s http://appserver/static/oth/css/style.css 7curl -o /dev/null -w '%{http_code}\n' -s http://appserver/static/oth/common/css/style.css 8$ 9$ bash style_access 10404 11404 12404 13404 14404 15404

###補足情報(言語/FW/ツール等のバージョンなど)
UbuntuServer 16.04LTS
Python 3.5.2
Django 1.11.4

プロジェクトROOT: /opt/oth
アプリケーションROOT: /opt/oth/oth

WSGI

bash

1# cat /etc/apache2/conf-enabled/rjb.conf 2WSGIScriptAlias / /opt/oth/oth/wsgi.py 3WSGIPythonPath /opt/oth/ 4 5<Directory /opt/oth/oth/> 6<Files wsgi.py> 7 Require all granted 8</Files> 9</Directory>

今回はわかりやすくとにかくCSSだけにアクセスするために最小限に絞ってテストしました。
実際のVIEWなどは表示されています。
データベースの接続等も問題ありませんでした。
Staticの設定だけがNot Foundになってしまい、デザイン崩れして困っています。

Djangoはバッチ用途ではよく使うのですが、WEBは初めてで勝手がわかりません。
よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

settings.pyに、以下の記述を足してください。

python

1STATICFILES_DIRS = [ 2 BASE_DIR, 3]

これは、プロジェクトROOT直下のstyle.cssが配信されます。(BASE_DIRなので)
STATICFILES_DIRS にパスを足すと、/static/ というURLだったならば(settings.pyのSTATIC_URL)それらのパスの中から探しにいきます。

ただ、もう少し一般的な方法としてはmanage.py startapp app のようにDjangoアプリケーションを作成し、その中に「static」ディレクトリを作成する、という方法です。
Djangoのデフォルトの動作では、settings.pyのINSTALLED_APPSに記載されたDjangoアプリケーション内の、staticディレクトリを静的ファイルの置き場として認識します。
この場合、STATICFILES_DIRSの記載は必要ありません。

これらの動作は、DEBUG=True のときしか上手く動作しないことに注意してください。
DEBUG=Falseにする場合は、今回ならばconfファイルにて

Alias /static/ /opt/oth/

のような感じで指定します。欲を言うと、/var/www/static のようなパブリックな場所に静的ファイルを置くと良いです。

投稿2017/08/21 13:02

toritoritorina

総合スコア972

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

al_aya_yuka

2017/08/21 23:59

> これらの動作は、DEBUG=True のときしか上手く動作しないことに注意してください。 なるほど、そうなのですね。 これで解決できました。 本当にありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問