もた日記

くだらないことを真面目にやる

Djangoメモ(15) : runserver_plusで対話型シェルを使ったデバッグ

  • Django Extensions, Werkzeugのインストール
  • runserver_plusの使い方
  • まとめ

Python 3.6.4 Django 2.0.2

A Complete Beginner's Guide to Djangoのチュートリアルを参考に掲示板アプリを作成中。


Django Extensions, Werkzeugのインストール

アプリを作成中だがデバッグしやすいようにDjango Extensionsに含まれるrunserver_plusを使ってみる。

github.com

Django ExtensionsはDjangoの拡張機能を集めたパッケージでpipでインストールできる。
runserver_plusを使用するにはWerkzeug(ドイツ語で工具、道具という意味)というWSGI Webアプリケーションライブラリが必要なので併せてインストールする。

$ pip install django-extensions Werkzeug
続きを読む

Djangoメモ(14) : Django Debug Toolbarでデバッグ情報を表示

  • Django Debug Toolbar
  • インストール
  • 各パネルの表示内容
  • パネル設定
  • debugsqlshellコマンド
  • まとめ

Python 3.6.4 Django 2.0.2

A Complete Beginner's Guide to Djangoのチュートリアルを参考に掲示板アプリを作成中。


Django Debug Toolbar

アプリを作成中だがデバッグしやすいように色々なデバッグ情報を表示できるDjango Debug Toolbarを使ってみる。

github.com

続きを読む

Djangoメモ(13) : extendsとblockでテンプレートの継承

  • 親テンプレート作成と継承
  • ナビゲーションバー追加
  • 参考:フォント変更
  • まとめ

Python 3.6.4 Django 2.0.2

A Complete Beginner's Guide to Djangoのチュートリアルを参考にテンプレートを継承してみる。


親テンプレート作成と継承

テンプレートに共通部分がある場合は共通部分を親テンプレートとして定義し、子テンプレートに個別の処理を記述するのがメンテンナンスしやすい。
最初に親テンプレートとなるtemplates/base.htmlを下記内容で新規作成する。

{% load static %}<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>{% block title %}Django Boards{% endblock %}</title>
    <link rel="stylesheet" href="{% static 'css/bootstrap.min.css' %}">
  </head>
  <body>
    <div class="container">
      <ol class="breadcrumb my-4">
        {% block breadcrumb %}
        {% endblock %}
      </ol>
      {% block content %}
      {% endblock %}
    </div>
  </body>
</html>

{% block %}, {% endblock %}は領域を確保するタグで、子テンプレートでこのblock内のHTMLを置き換えることができる。 {% block title %}Django Boards{% endblock %}のようにデフォルト値を指定することもでき、子テンプレートで何も設定されない場合はこのデフォルト値が使用される。

続きを読む

Djangoメモ(12) : get_object_or_404ショートカットとリンクのテスト

  • get_object_or_404ショートカット
  • ナビゲーションリンクの追加とテスト
    • メインページの変更
    • 詳細ページの変更
  • まとめ

Python 3.6.4 Django 2.0.2

A Complete Beginner's Guide to Djangoのチュートリアルを参考にget_object_or_404ショートカットの利用とリンクのテストをしてみる。


get_object_or_404ショートカット

前回作成したTopic一覧を表示する詳細ページのテストをするためにmyproject/boards/tests.pyBoardTopicsTestsを追加。

from django.urls import reverse, resolve
from django.test import TestCase
from .views import home, board_topics
from .models import Board

class HomeTests(TestCase):
    # 省略

class BoardTopicsTests(TestCase):
    def setUp(self):
        Board.objects.create(name='Django', description='Django board.')

    def test_board_topics_view_success_status_code(self):
        url = reverse('board_topics', kwargs={'pk': 1})
        response = self.client.get(url)
        self.assertEquals(response.status_code, 200)

    def test_board_topics_view_not_found_status_code(self):
        url = reverse('board_topics', kwargs={'pk': 99})
        response = self.client.get(url)
        self.assertEquals(response.status_code, 404)

    def test_board_topics_url_resolves_board_topics_view(self):
        view = resolve('/boards/1/')
        self.assertEquals(view.func, board_topics)
続きを読む

Djangoメモ(11) : リクエスト処理の流れとURLconf (URL configuration)

  • 詳細ページを表示
  • リクエスト処理の流れ
  • URLconf、ビュー、テンプレートの編集
  • パスコンバータ
  • まとめ

Python 3.6.4 Django 2.0.2

A Complete Beginner's Guide to Djangoのチュートリアルを参考にリクエスト処理の流れとURLconf (URL configuration)について調べてみる。


詳細ページを表示

前回までで下図のBoard一覧を表示するページを作成したが、このページのBoard名(Django, Python, Random)をクリックしたら各BoardのTopic一覧を表示する詳細ページを作成することを考える。
Boardは複数個登録できるので、固定のURLではなくboards/1, boards/2といった特定パターンのURLでアクセスできるようにする必要がある。

f:id:wonder-wall:20180310231749p:plain

続きを読む