LoginSignup
0
0

More than 3 years have passed since last update.

Djangoのチュートリアルを読んでいく!【その3 Django初心者】

Posted at

はじめに

私はプログラミング歴1年の初心者です。
実務でWebサイトのコーディングを1年間行ってきました。
そろそろシステム開発もできるようになりたいということで
LaravelやReactをこれから勉強していこうと思っております。

今回の目的

Djangoでアプリを実際に作っていく流れを学ぼうと思います。
公式チュートリアルを読んでいきます。

目次

  1. アセット
  2. 管理画面のセット

実践

アセット

スタイルシート

# 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 %}
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0