DjangoのTips

自分のためのメモ。リンクは、基本的にDjangoの3.1ドキュメント。

(Django公式)

Django3.1 ドキュメント

Django3.1 APIリファレンス

(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">
 &copy; gijutsu.com 2019-{% now "Y" %}
</p>

1.6 メニューのアクティブ制御

共通メニューの、ページ毎での”active”制御を、どう実装するか。以下の回答が参考になる。

https://stackoverflow.com/questions/46617375/how-do-i-show-an-active-link-in-a-django-navigation-bar-dropdown-list?answertab=votes#tab-top

ドキュメントはこちら。

ResolverMatch

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.ビュー

ビルトインのクラスベースビュー API

1)ログインが必要なページ

ログインが必要なページについては、以下でログインしていない場合、ログイン画面にリダイレクトさせる。

login_required デコレータ

クラスビューを使っている場合は、MixInを使う。

LoginRequired mixin

5.フォーム

https://docs.djangoproject.com/en/3.1/topics/forms/

Form fields

ビルトインの Field クラス

モデルからフォームを作成する

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

「DjangoのTips」への1件のフィードバック

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください