自分のためのメモ。リンクは、基本的にDjangoの3.1ドキュメント。
(Django公式)
(Djangoソース)
https://github.com/django/django/tree/master/django
(DBに関してはこっち)
1.テンプレート
1.1 include
テンプレートの中から、テンプレートを呼び出せる。
https://docs.djangoproject.com/ja/3.1/ref/templates/builtins/#include
方針としては、templates/app/commonというようなフォルダを作って共通のテンプレート部品を置いて、includeして利用する。
1.2 オーバライドしたblockで、基底の呼び出し
https://docs.djangoproject.com/ja/3.1/howto/overriding-templates/#extending-an-overridden-template
以下を呼び出せばいい。注意点として基底側で、「static」を使っている場合、「load static」を呼ばないとエラーになる。
{{ block.super }}
1.3 改行のBRタグへの変更
「linebreaksbr」というフィルタを使えばいい。
https://docs.djangoproject.com/ja/3.1/ref/templates/builtins/#linebreaksbr
{{ value|linebreaksbr }}
1.4 フィルタ
「|」は、テンプレート言語のフィルタというもの。
https://docs.djangoproject.com/ja/3.1/ref/templates/language/#filters
自分でフィルタを登録することもできるらしい。
https://docs.djangoproject.com/ja/3.1/howto/custom-template-tags/#writing-custom-template-filters
Djangoのアドオンのhumanizeも使える。
https://docs.djangoproject.com/ja/3.1/ref/contrib/humanize/
桁区切りを入れる、intcommaだが、自分のアプリではうまくいかずにソースを見たところ、言語設定の関係がうまく動作しなかったよう。とりあぜう、第二引数をFalseを設定して回避できた。
1.5 footerのコピーライトの年号
Visual Studioのサンプルだと、ビューで年を変数にしてテンプレートに渡しているが、テンプレートの「now」を使えばわざわざ渡す必要は無くなる。
https://docs.djangoproject.com/ja/3.1/ref/templates/builtins/#now
コピーライト部分は、以下のような感じで書けばいい。
<p class="text-center"> © gijutsu.com 2019-{% now "Y" %} </p>
1.6 メニューのアクティブ制御
共通メニューの、ページ毎での”active”制御を、どう実装するか。以下の回答が参考になる。
ドキュメントはこちら。
urls.pyのurlpatternsで定義したnameでチェックすることで実現。
{% with request.resolver_match.url_name as url_name %} <ul class="navbar-nav mr-auto"> <li class="nav-item {% if url_name == 'home' %}active{% endif %}"> <a class="nav-link" href="{% url 'home' %}">Home</a> </li> <li class="nav-item {% if url_name == 'contact' %}active{% endif %}"> <a class="nav-link" href="{% url 'contact' %}">お問合せ</a> </li> </ul> {% endwith %}
2.セッション
https://docs.djangoproject.com/ja/3.1/topics/http/sessions/
具体的なViewでの使い方は、以下。
3.モデル
https://gijutsu.com/2021/01/12/django-db/
バリデータの設定は以下に
https://docs.djangoproject.com/ja/3.2/ref/validators/
4.ビュー
1)ログインが必要なページ
ログインが必要なページについては、以下でログインしていない場合、ログイン画面にリダイレクトさせる。
クラスビューを使っている場合は、MixInを使う。
5.フォーム
https://docs.djangoproject.com/en/3.1/topics/forms/
6.役に立つパッケージ
※国内限定なら以下で十分
https://qiita.com/xKxAxKx/items/86bdf0bc4c7dc9ee65d9
7.ログ
https://docs.djangoproject.com/ja/3.1/topics/logging/#examples
8.URL ディスパッチャ
https://docs.djangoproject.com/ja/3.1/topics/http/urls/
コントローラの中で、URLを取り出す場合は、reverseを使う。
https://docs.djangoproject.com/ja/3.1/topics/http/urls/#reverse-resolution-of-urls
from django.urls import reverse : return HttpResponseRedirect(reverse('news-year-archive', args=(year,)))
9.メッセージ
https://docs.djangoproject.com/ja/3.1/ref/contrib/messages/
10.リクエストとレスポンスのオブジェクト
https://docs.djangoproject.com/ja/3.1/ref/request-response/
(処理後に呼び出しページに戻る例)
return HttpResponseRedirect(request.META['HTTP_REFERER'])
同じnameの入力値を配列で受け取るのは以下。
https://docs.djangoproject.com/ja/3.1/ref/request-response/#django.http.QueryDict.getlist