# Djangoでたぶん掲示板を作る メモは諦めたので、Djangogirls Tutorialをやりましょう [Django Girls のチュートリアル](https://tutorial.djangogirls.org/ja/) ## 環境構築 ディレクトリを作って中に入る ``` .sh mkdir dir_name cd dir_name ``` 仮想環境を作る ``` .sh python3 -m venv venv ``` 仮想環境を有効化する ``` .sh source venv/bin/activate.fish ``` Djangoのインストール ``` .sh pip install django ``` インストールしたパッケージを requirements.txt に出力しておく ``` .sh pip freeze > requirements.txt ``` ## プロジェクト作成 ``` .sh django-admin startproject config . ``` settings.pyの設定を調整 ``` PROJECT_NAME.settings.py LANGUAGE_CODE = 'ja' TIME_ZONE = 'Asia/Tokyo' USE_TZ = False ``` 開発用サーバーを起動してみる ``` .sh python manage.py runserver ``` 初期マイグレーションを実行 ``` .sh python manage.py migrate ``` ## アプリ作成 ``` .sh django-admin startapp ita ``` PROJECT_NAME.settings.py の INSTALLED_APPS に追加 ``` PROJECT_NAME.settings.py INSTALLED_APPS = [ : 'django.contrib.staticfiles', 'ita', # ココに追加 ] ``` ## モデルを定義する ita.models.py ``` ita.models.py from django.db import models class Ita(models.Model): title = models.CharField(max_length=128) content = models.TextField() class Meta: db_table = 'Ita' ``` マイグレーションを行う ```.sh ./manage.py makemigrations ./manage.py migrate ``` ## Viewの作成 - ListView - CreateView views/ を作成 && ``__init__.py`` を中に入れる ``` ita ├ : ├ app.py.py └ views/ ├ __init__.py ├ list.py └ create.py ``` list.py ```list.py from django.views.generic import ListView from ita.models import Ita class ItaListView(ListView): model = Ita template_name = "board/list.html" ``` settings.py ``` settings.py TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [ os.path.join(BASE_DIR, 'templates'), # ココを追加 ], }, ] ``` project_root(configがある階層) に templates/ を作成 ListView用のテンプレートを作成 templates/board/list.html ``` list.html <ul class=""> {% for item in object_list %} <li class=""> <a href="">{{ item.title }}</a> <span>{{ item.content }}</span> </li> {% endfor %} </ul> ``` ita.urls.pyを作成。 ListViewをパスに紐付ける。 ``` ita.urls.py from django.urls import path from .views.list import ListView urlpatterns = [ path('list/', ListView.as_view(), name='board-list'), ] ```