Djangoのstaticファイルが404から復活した話
あらすじ
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="">
CSSの例
<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のアクセス許可を設定
[projectname]\settings.py
STATIC_URL = '/static/' # 配信用のURL
STATIC_ROOT = os.path.join(BASE_DIR, 'deploy') # プロジェクト直下のdeployディレクトリを指定
STATICFILES_DIRS = (
os.path.join(BASE_DIR, 'static'), # プロジェクト直下のstaticディレクトリを指定
)
conf\httpd-app.conf:追記
# collectstaticでコピーしたstaticディレクトリのパスを登録
Alias /static/ [deploy用のディレクトリ]
# staticへのアクセスを許可
<Directory [deploy用のディレクトリ]>
Require all granted
</Directory>
画像の例
<img width="30" src="{% static '[app-name]/bitmap.png' %}" height="30" class="d-inline-block align-top" alt="">
CSSの例
<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のアクセス許可を設定
[projectname]\settings.py
STATIC_URL = '/static/' # 配信用のURL
STATIC_ROOT = os.path.join(BASE_DIR, 'deploy') # プロジェクト直下のdeployディレクトリを指定
STATICFILES_DIRS = (
os.path.join(BASE_DIR, 'static'), # プロジェクト直下のstaticディレクトリを指定
)
conf\httpd-app.conf:追記
# collectstaticでコピーしたstaticディレクトリのパスを登録
Alias /static/ [deploy用のディレクトリ]
# staticへのアクセスを許可
<Directory [deploy用のディレクトリ]>
Require all granted
</Directory>
directory-tree
[project-directory]/
┣ [project-name]/
┃ ┣ settings.py
┃ ┗ ...
┣ static/
┃ ┗ ...
┣ [app-name]/
┃ ┣ static/
┃ ┃ ┗ [app-name]/
┃ ┃ ┣ css/
┃ ┃ ┃ ┗ ...
┃ ┃ ┣ js/
┃ ┃ ┃ ┗ ...
┃ ┃ ┣ img/
┃ ┃ ┃ ┗ ...
┃ ┃ ┗ ...
┃ ┗ ...
┗ deploy/ # deploy用のディレクトリ
┃
┣ [app-name]/
┃ ┗ ...
┗ ...
[projectname]\settings.py
STATIC_URL = '/static/' # 配信用のURL
STATIC_ROOT = os.path.join(BASE_DIR, 'deploy') # プロジェクト直下のdeployディレクトリを指定
STATICFILES_DIRS = (
os.path.join(BASE_DIR, 'static'), # プロジェクト直下のstaticディレクトリを指定
)
conf\httpd-app.conf:追記
# 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を再起動してブラウザでアクセス
参考にしたサイト
Excelsior!
Author And Source
この問題について(Djangoのstaticファイルが404から復活した話), 我々は、より多くの情報をここで見つけました https://qiita.com/ShortArrow/items/d9377f2453e2cf9314be著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .