はじめに
自分用の備忘録です。
プロジェクト関連の操作
プロジェクトの作成
startproject
python manage.py startproject mysite
アプリケーション関連の操作
アプリケーションの作成
startapp
python manage.py startapp games
アプリケーションのインストール
アプリケーションの追加をdjangoに教える必要があります。
mysite/settings.py
(省略)
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'games', #ここに追記
]
(省略)
モデルを定義
アプリケーション内にモデルを追加します。
Railsと違い、import句ぐらいしか自動生成されないので、0から自身で記載する必要があります。
mysite/games/models.py
from django.db import models
class Game(models.Model): #モデル名は単数形で!
title = models.CharField(max_length=200)
def __str__(self):
return self.title
マイグレーションの作成
モデル定義を元にマイグレーションを作成します。
マイグレーションを作成する対象のアプリケーションを指定します。
makemigrations
python manage.py makemigrations games
Migrations for 'games':
games\migrations\0001_initial.py
- Create model Game
adminサイトでモデルを有効化する
管理サイトにアクセスするとモデルを編集できるようになります。
mysite/games/admin.py
from django.contrib import admin
from .models import Game
admin.site.register(Game)
URLマッピングを設定
まず、mysiteのurls.pyにgames.urlsへの参照を追加します。
mysite/mysite/urls.py
from django.urls import path, include
from django.contrib import admin
from django.contrib.auth import views
urlpatterns = [
path('admin/', admin.site.urls),
path('accounts/login/', views.LoginView.as_view(), name='login'),
path('accounts/logout/', views.LogoutView.as_view(next_page='/'), name='logout'),
path('games/', include('games.urls')),
]
続いて、gamesのurls.pyにURLマッピングを追加します。
mysite/games/urls.py
from django.urls import path
from . import views
urlpatterns = [
path('', views.index, name='index'),
]
ビューの定義
mysite/games/views.py
from django.shortcuts import render
from .models import Game
def index(request):
games = Game.objects.all
return render(request, 'games/index.html', {'games': games})
テンプレートの定義
mysite/games/templates/games/index.html
{% extends 'games/base.html' %}
{% block content %}
{% for game in games %}
<div class="game">
<div class="title">
<p>title: {{ game.title }}</p>
</div>
</div>
{% endfor %}
{% endblock %}
mysite/games/templates/games/base.html
{% load static %}
<html>
<head>
<title>Django Girls blog</title>
<link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css">
<link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap-theme.min.css">
<link href='//fonts.googleapis.com/css?family=Lobster&subset=latin,latin-ext' rel='stylesheet' type='text/css'>
<link rel="stylesheet" href="{% static 'css/games.css' %}">
</head>
<body>
<div class="page-header">
<h1><a href="/">Hello Django</a></h1>
</div>
<div class="content container">
<div class="row">
<div class="col-md-8">
{% block content %}
{% endblock %}
</div>
</div>
</div>
</body>
</html>