あらすじ
djangoのstaticファイルがrunserverだとアクセスできたのにapacheだとアクセスできませんでした。解決方法が分かったので、頭の整理を兼ねて書き起こしました。Bitnami前提のため、直接Apacheを入れている人は読みかえてください。
流れ
- Windows PC を用意。 64bit。
- BITNAMI DJANGO STACK を利用して、mysqlとapacheをインストールする。
- Create A New Django Projectを参考にdjangoでプロジェクトを作成
- Deploy A Django Projectを参考にデプロイ設定
- サイトにアクセス
- 画像やCSSを読み込めまない!
- settings.pyとhttpd-app.confに追記して collectstatic した。
- サイトにアクセス
- 無事に読み込み成功!
読み込まなかったファイル
<img width="30" src="{% static '[app-name]/bitmap.png' %}" height="30" class="d-inline-block align-top" alt="">
<link rel="stylesheet" href="{% static '[app-name]/css/style.css' %}">
ディレクトリ構成
`:directory-tree
[project-directory]/
┣ [project-name]/
┃ ┣ settings.py
┃ ┗ ...
┣ static/
┃ ┗ ...
┣ [app-name]/
┃ ┣ static/
┃ ┃ ┗ [app-name]/
┃ ┃ ┣ css/
┃ ┃ ┃ ┗ ...
┃ ┃ ┣ js/
┃ ┃ ┃ ┗ ...
┃ ┃ ┣ img/
┃ ┃ ┃ ┗ ...
┃ ┃ ┗ ...
┃ ┗ ...
┗ deploy/ # deploy用のディレクトリ
┃
┣ [app-name]/
┃ ┗ ...
┗ ...
`
staticのアクセス許可を設定
`py:[projectname]\settings.py
STATIC_URL = '/static/' # 配信用のURL
STATIC_ROOT = os.path.join(BASE_DIR, 'deploy') # 配信用のURL
STATICFILES_DIRS = (
os.path.join(BASE_DIR, 'static'), # プロジェクト直下のstaticディレクトリを指定
)
`
# collectstaticでコピーしたstaticディレクトリのパスを登録
Alias /static/ [deploy用のディレクトリ]
# staticへのアクセスを許可
<Directory [deploy用のディレクトリ]>
Require all granted
</Directory>
[deploy用のディレクトリ]
はWindows10では
"%userprofile%/Bitnami Django Stack projects/[project-dirctory]/deploy/"
Staticファイルのコレクション
設定追記が出来たらpython manage.py collectstatic
で一か所にまとめます。
Note : adminサイトなどを用意している場合、
そのstaticも一緒にまとまるので予想外のファイル数に驚かないように!
↓
apacheを再起動してブラウザでアクセス
参考にしたサイト
-
djangoは誰が動かしているのか?(デプロイのための俯瞰)
- ここを読まなければ詰んだままでした。感謝。
- Django staticファイル まとめ
- Djangoにおける静的ファイル(static file)の取り扱い
- The staticfiles app | Django Official
Excelsior!