Front 側 を
URL のreact-router-dom
をリクエストは<wbr>一旦、<wbr>Root URL に<wbr>飛ばして、<wbr>React router側で<wbr>然るべき<wbr>ハンドリングを<wbr>したい
ためどのような
結果を
Django の 設定
URL の
上記を
url(r'^$', TemplateView.as_view(template_name='home/home_page.html'), name='home_page'), url(r'^(?:.*)/?$', TemplateView.as_view(template_name='home/home_page.html'), name='other_page'),
Django のurl(r'^(?:.*)/?$', TemplateView.as_view(template_name='home/home_page.html'), name='other_page'),
の
react-router-dom の 設定
Django で
react-router-dom 側では、
react-router-dom で、<route component="{NoMatch}/">
のように、
以下、
* reactjs - react-router-dom v4 404 pageNotFound
ただ、
以下、
* javascript - How to let react router respond with 404 status code? - Stack Overflow
react-router-dom で 404 ページを 表示しつつ、 404エラーコードを 返す
最終的に
urls.py
urls.py には、react-router-dom
で、記載している URL に 対する マッピングを 記載します。 # the list: url(r'^$', TemplateView.as_view(template_name='home/home_page.html'), name='home_page'), url(r'^about/$', TemplateView.as_view(template_name='home/home_page.html'), name='other_page'), url(r'^post/.+/$', TemplateView.as_view(template_name='home/home_page.html'), name='other_page'),
404.html の
記述を、 home/home_page.html
と同様の 記述に 変更する
404.html
を、react の 呼び 出しを 行う 記述に 変更しました。
Django は、デフォルトで、 404 エラー発生時に、 404.html
を参照します。
Django の404 ページの 設定に ついては、 以下の 記事が 参考に なりました。
Djangoで、404ページを 作る - naritoブログ react-router-dom の
設定
path を定義しない、 Route の 記述を 追加しました。 <Switch> <Route exact path="/" component={PostList}/> <Route exact path="/post/:slug" component={PostDetail}/> <Route exact path="/about" component={About}/> <Route component={NoMatch}/> </Switch>
NoMatch component の
作成
以下のような、NoMatch component を 作成しました。 import React, {Component} from "react"; class NoMatch extends Component { render() { return ( <div className="mainContainer"> 404 Page Not Found... </div> ); } } export default NoMatch;
settings.py の
Debug を False して、 insecure を 付与して、 サーバーを 起動する
404 ページのテストを 行う際は、 Debug を False に する 必要が あります。
Debug をFalse に すると、 static ディレクトリの 探索の 仕方も 変わる ため、 insecure オプションを 付与して、 各プロジェクトの static ディレクトリを 探索するようにします。 # SECURITY WARNING: don't run with debug turned on in production! DEBUG = False
python3 manage.py runserver --insecure
これで、
以上です。
コメント