DjangoでListViewを使う

from django.views import generic

class ArticlesView(generic.ListView):
    model = Article

上記のように定義すると

{% for article in object_list %}
{% endfor %}

テンプレート側では「object_list」という名前で渡される。

{% for article in article_list %}
{% endfor %}

model名がarticleだからなのか「article_list」という名前でも値が取れる。

DjangoでTemplateViewを使う

Djangoのドキュメント

例えばhttps://output.space/about/というページをDjangoで実装するとしたら、

urlpatterns = [
    path('about/',views.AboutView.as_view(),name="about"),
]

urls.pyに上記のようにurlpatternsを追加し、

from django.views import generic

class AboutView(generic.TemplateView):
    template_name = 'cafe/about.html'

views.pyにAboutViewを追加する。

DjangoでDBに初期データを登録する。

Djangoにはfixtureという、初期データを登録する機能が備わっている。XML、json、yaml形式のファイルを該当ディレクトリに配置してコメンドを打つとデータを挿入してくれる。今回はyaml形式を使う。

  1. アプリケーションディレクトリにfixturesというディレクトリを作る

    $ python manage.py startapp myapp

    で作られたディレクトリ直下に/fixtures/という名前のディレクトリを作成する。

  2. 初期データ(yamlファイル)を作る

    ここでは都道府県テーブルにデータを挿入すると想定してprefecture.yamlを作る。
    「.htm」と「.html」のように、「.yml」と「.yaml」という拡張子があるようだが「.yaml」を使う。

    - model: myapp.prefecture
      pk: 1
      fields:
        name: "北海道"
    - model: myapp.prefecture
      pk: 2
      fields:
        name: "青森県"
    

    中身はこんな感じ。
    「myapp」のprefectureモデルに挿入する。
    モデル名の定義はクラスなのでPrefectureと頭が大文字だが、小文字でOK。

  3. コマンドを入力して挿入する。

    manage.pyのある階層で

     $ python3 manage.py loaddata prefecture.yaml

    を実行。

    Installed 1 object(s) from 1 fixture(s)

    のように表示されれば成功。

    CommandError: Problem installing fixture 'prefecture': yaml is not a known serialization format.

    のようなエラーが出るかもしれない。

    これはPythonがyaml形式のファイルを認識できないためで、pyyamlというライブラリを追加する必要がある。

    $ pip3 install pyyaml

    のようにして追加すればOK。

Djangoの管理画面の見出しとかを変更する。

タイトル、ヘッダー

https://qiita.com/okoppe8/items/702dab51e4db5d0ed677

urls.py

from django.contrib import admin

admin.site.site_title = '<title>に表示される' 
admin.site.site_header = 'ヘッダーに表示される' 
admin.site.index_title = 'ログイン後のトップページ、ヘッダー直下に表示される'

モデル名

admin.site.register(Station)

admin.pyで上記のように記述すると、Django管理画面のメニューについかされ、管理画面上で追加削除更新が行えるようになる。
が、気になるのはメニューに「Station」とモデル名そのまま表示される点。
ここを「駅名」のようにわかりやすい名前で表示したい。

class Station(models.Model):
    class Meta:
        verbose_name = '駅名' #単数形
        verbose_name_plural = '駅名' #複数形
$ python3 manage.py migrate
$ python3 manage.py createsuperuser