te-touのブログ

音楽制作・車・プログラミング・旅行・その他考えてる事など、備忘録的なことも含めて個人的なページです。

Django ListViewで引数を使う(context)




int i = 90
char x = "変数"  とか、多分プログラミングの「さしすせそ」。
ですが、Djangoでこれのやり方がよく分からなかったので色々調べました。
備忘です。

環境
  • python : 3系
  • Django : version 3.0.2
用例

ex)use case
かなりどうでも良い思いつきの用例です。

細かいことは考えず、
今回nemeアプリというのを作ってテーブル項目(テーブル名:FullName)に氏名を持っているとします。
ついでだから、「つのだ☆ひろ」みたいに氏名の間に☆を入れようと思いつきました。
じゃあ、引数に☆を持たせて実装しよう。という流れです。

contextというのをViewsに書いて引数を設定し、templateで引数を受け取って画面に表示させます。

ソース

models

from django.db import models

class FullName(models.Model)
          firstName = models.CharField(
                 verbose_name = '名',
                 max_length=10,
           )
           familyName = models.CharField(
                 verbose_name = '氏',
                 max_length=10,
           )

views

from django.shortcuts import render

class FullNameListView(ListView):
          model = FullName,
          template_name = 'name/fullname_list.html'  #使用するテンプレートを指定
          def get_context_data(self, **kwargs):
                context = super().get_context_data(**kwargs)
                context["star"] = "☆"
                return context

今回重要なのは、def get_context_data〜return contextのところですね。
context = super()でFullNameListViewクラスを上書き?オーバーライドしてる感じかと。
context["~"]で変数を作って、値を代入。
returnで変数を戻す(送る?)という感じかと思います。

urls

from django.contrib import admin
from django.urls import path

from name.views import FullNameListView

urlpatterns = [
          path('fullname', FullNameListView.as_view(), name="fullname"),
          path('admin/', admin.site.urls),

いつも通りパスを通します。

template (fullname_list.html)

<div class="fullname">
         {{firstName }} {{star}} {{familyName}}
</div>

テンプレートに{{~}}で挟んで項目名(引数)を書けば、「苗字☆名前」のように表示される。
この辺りの受け渡しがなかなかややこしいな。というのが実感です。




www.facebook.com
www.youtube.com