はじめに
私はプログラミング歴1年の初心者です。
実務でWebサイトのコーディングを1年間行ってきました。
そろそろシステム開発もできるようになりたいということで
LaravelやReactをこれから勉強していこうと思っております。
今回の目的
Djangoでアプリを実際に作っていく流れを学ぼうと思います。
公式チュートリアルを読んでいきます。
目次
- アセット
- 管理画面のセット
実践
アセット
スタイルシート
# polls/staticディレクトリを作成する
$ mkdir polls/static
# polls/static/pollsディレクトリを作成する
$ mkdir polls/static/polls
polls/static/polls/style.css
# スタイルをつける
li a {
color: green;
}
polls/templates/polls/index.html
# 上部に追加する
{% load static %}
<link rel="stylesheet" type="text/css" href="{% static 'polls/style.css' %}">
画像追加
# 画像を追加する
background.gif
polls/static/polls/style.css
# 背景画像にセット
body {
background: white url("images/background.gif") no-repeat;
}
管理画面のセット
管理画面のカスタマイズ
polls/admin.py
# 詳細画面の順番を入れ替えるカスタマイズ
class QuestionAdmin(admin.ModelAdmin):
fields = ['pub_date', 'question_text']
admin.site.register(Question, QuestionAdmin)
polls/admin.py
# 詳細画面のレイアウトを更に変更
class QuestionAdmin(admin.ModelAdmin):
fieldsets = [
(None, {'fields': ['question_text']}),
('Date information', {'fields': ['pub_date']}),
]
admin.site.register(Question, QuestionAdmin)
polls/admin.py
# リレーションを張ったオブジェクトの追加
from django.contrib import admin
from .models import Choice, Question
admin.site.register(Choice)
↓↓↓↓ さらに以下のようにすると ↓↓↓↓
class ChoiceInline(admin.StackedInline):
model = Choice
extra = 3
class QuestionAdmin(admin.ModelAdmin):
fieldsets = [
(None, {'fields': ['question_text']}),
('Date information', {'fields': ['pub_date'], 'classes': ['collapse']}),
]
inlines = [ChoiceInline]
admin.site.register(Question, QuestionAdmin)
polls/admin.py
# 管理画面の一覧ページをカスタマイズする
class QuestionAdmin(admin.ModelAdmin):内で
list_display = ('question_text', 'pub_date', 'was_published_recently')
list_filter = ['pub_date']
search_fields = ['question_text']
polls/models.py
# 管理画面の一覧ページの表示を改善する
from django.contrib import admin
class Question(models.Model):
# ...
@admin.display(
boolean=True,
ordering='pub_date',
description='Published recently?',
)
def was_published_recently(self):
now = timezone.now()
return now - datetime.timedelta(days=1) <= self.pub_date <= now
設定ファイルをカスタムする
djangosite/djangosite/settings.py
# プロジェクトテンプレートをカスタマイズする
TEMPLATES内の
'DIRS': [BASE_DIR / 'templates'],
# djangositeディレクトリ直下にtemplatesディレクトリを作成
$ mkdir templates
# templatesディレクトリ直下にadminディレクトリを作成
$ mkdir templates/admin
# djangoのソースファイルの場所を探して
$ python -c "import django; print(django.__path__)"
# デフォルトDjango adminテンプレートディレクトリを探す
$ cd djangoのソースファイルの場所
$ cd contrib/admin/templates
# さらにその中のadmin/base_site.htmlを新しく作ったディレクトリにコピーする
$ cp admin/base_site.html ~/my_study/djangosite/templates/admin
templates/admin/base_site.html
# base_site.htmlを編集する
{% extends "admin/base.html" %}
{% block title %}{% if subtitle %}{{ subtitle }} | {% endif %}{{ title }} | {{ site_title|default:_('Django site admin') }}{% endblock %}
{% block branding %}
<h1 id="site-name"><a href="{% url 'admin:index' %}">Polls Administration</a></h1>
{% endblock %}
{% block nav-global %}{% endblock %}