Django + React Build
2022年4月17日日曜日
React ProjectをDjangoにバインドするために、挿入後にこの問題を解決しました.
Debug=Falseのとき!!!!
Debug=Trueでは通常静的ファイルがロードされますが、Falseではhtmlファイル以外のすべてのファイルはロードされません.
文字列は「/」で終わる必要があります.
前述したように、Webページから静的ファイルをロードする場合/setabets/...に登録します.
複数のパスを指定してlistまたはtupleでマウントすればいいです.
プレフィックスを追加した場合(前例では「web」)、ファイルの読み込み時に/STATIC URL/web/...に登録します.
開発段階では適用されず、実際のサービス環境で使用されます.
サーバ上のファイルを読み込む-open(fullpath,“rb”)
Streamingで答える-StreamingHttpResponse
欠点は、パフォーマンスがWebサーバの直接サービスに及ばないことです.
https://gaussian37.github.io/python-django-non-debug-mode/
https://blog.hannal.com/2015/04/start_with_django_webframework_06/
React ProjectをDjangoにバインドするために、挿入後にこの問題を解決しました.
n/a.ターゲット
# [ React Path ]
/home/project/js/sagi-front/
# [ Django Path ]
/home/project/python/sagi-back/
REACT Pathで糸でできたインデックスを作りました今日の目標はhtmlと静的ファイルをDjangoファミリーに配布することです.Debug=Falseのとき!!!!
質問する
Debug=Trueでは通常静的ファイルがロードされますが、Falseではhtmlファイル以外のすべてのファイルはロードされません.
解決策
レスポンスの設定
# [React Path]/package.json
{
// ...
"homepage": "assets/web/"
// ...
"scripts": {
"build": "BUILD_PATH='[Django Path]/build' react-scripts build"
}
}
# Bash
> yarn build
> npm run build
# 파일 이동
[Django Path]/build/index.html
=> [Django Path]/template/index.html
Django設定
# [Django Path]/mysite/settings.py
# Templates
TEMPLATES = [
{
# ...
'DIRS': [
os.path.join(BASE_DIR, 'template')
],
# ...
},
]
# Static files (CSS, JavaScript, Images)
STATIC_ROOT = BASE_DIR / 'staticfiles'
STATIC_URL = '/assets/'
STATICFILES_DIRS = [
( 'web', os.path.join( BASE_DIR, 'build' ) ),
]
# Bash
> python manage.py collectstatic
# [Django Path]/mysite/urls.py
from django.conf import settings
from django.conf.urls.static import static
from django.contrib import admin
from django.urls import path, re_path
from django.views.generic import TemplateView
from django.views.static import serve
urlpatterns = [
path('admin/', admin.site.urls),
re_path(r'^assets/(?P<path>.*)$', serve, { 'document_root': settings.STATIC_ROOT }),
re_path(r'.*', TemplateView.as_view(template_name = 'index.html'), name="react-web"),
]
urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
コンセプトアレンジ
STATIC_URL
# [Django Path]/mysite/settings.py
STATIC_URL = ‘/assets/’
Webページで使用する静的ファイルのトップレベルのURL.文字列は「/」で終わる必要があります.
前述したように、Webページから静的ファイルをロードする場合/setabets/...に登録します.
STATICFILES_DIRS
# [Django Path]/mysite/settings.py
STATICFILES_DIRS = [
( 'web', os.path.join( BASE_DIR, 'build' ) ),
]
「開発」(DEBUG Mode)で使用する静的ファイルパス複数のパスを指定してlistまたはtupleでマウントすればいいです.
プレフィックスを追加した場合(前例では「web」)、ファイルの読み込み時に/STATIC URL/web/...に登録します.
STATIC_ROOT
# [Django Path]/mysite/settings.py
STATIC_ROOT = BASE_DIR / 'staticfiles'
Djangoプロジェクトで使用されるすべての静的ファイルを1つの場所のパスに集約します.開発段階では適用されず、実際のサービス環境で使用されます.
# Bash
> python manage.py collectstatic
このコマンドを入力すると、STATIC ROOTで指定したフォルダにstatic fileを入れます.SERVE View
# [Django Path]/mysite/urls.py
from django.conf import settings
from django.urls import re_path
from django.views.static import serve
urlpatterns = [
re_path(r'^assets/(?P<path>.*)$', serve, { 'document_root': settings.STATIC_ROOT }),
]
serve view関数サーバ上のファイルを読み込む-open(fullpath,“rb”)
Streamingで答える-StreamingHttpResponse
欠点は、パフォーマンスがWebサーバの直接サービスに及ばないことです.
コメントサイト
https://gaussian37.github.io/python-django-non-debug-mode/
https://blog.hannal.com/2015/04/start_with_django_webframework_06/
Reference
この問題について(Django + React Build), 我々は、より多くの情報をここで見つけました https://velog.io/@ksk7584/Django-React-Buildテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol