Django 4.0 ドキュメント学習 (4)

前の記事Django 4.0 ドキュメント学習 (4)

初めての Django アプリを作成する、パート 6

アプリケーションのインターフェースとスタイルをカスタマイズする

まず、polls ディレクトリの下に static というディレクトリを作成します。Django は、Diango が polls/templates/ ディレクトリでテンプレートを検索する方法と同様に、このディレクトリで静的ファイルを検索します。
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' %}">

スタイルが正常に変更されました
ここに画像の説明を挿入
背景画像を追加する
polls/static/polls ディレクトリの下に images という名前のサブディレクトリを作成します。このディレクトリに、background.jpg という名前の画像を置きます。
polls/static/polls/style.css
を追加

body{
    
    
    background:white url("images/background.jpg")
}

背景画像はランダムに見つかります。あまり一致しませんが、問題ではありません。スタイルの設定方法を学ぶだけです。
ここに画像の説明を挿入

初めての Django アプリを作成する、パート 7

背景フォームをカスタマイズする

修正前:
ここに画像の説明を挿入
polls/admin.py

from django.contrib import admin
from .models import Question
class QuestionAdmin(admin.ModelAdmin):
    fields=['pub_date','question_text']
admin.site.register(Question,QuestionAdmin)

日付と質問の順序が変更されました
ここに画像の説明を挿入
フォームをいくつかのフィールドセットに分割します:
polls/admin.py

from django.contrib import admin
from .models import Question
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 Question,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)

このコードは、Django に次のように伝えます: 「選択肢オブジェクトは、質問管理ページで編集する必要があります。デフォルトでは、選択肢には 3 つのフィールドで十分です。」「投票の追加」ページをロードして、それがどのように見えるかを確認します
:
ここに画像の説明を挿入
関連する選択肢スロットが 3 つあります --追加の定義によって表され、作成されたオブジェクトの「変更」ページに戻るたびに、3 つの新しいスロットが表示されます。
既存のソケットを削除する場合は、ソケットの右上隅にある X をクリックします。
ここに画像の説明を挿入
ただし、まだ小さな問題があります。関連するすべての Choice オブジェクトのフィールドを表示するには、大量の画面領域を占有します。この問題に対して、Django は、関連するオブジェクトを表形式で 1 ​​行に表示する方法を提供します。これを使用するには、ChoiceInline 宣言を次のように変更するだけです:
polls/admin.py

class ChoiceInline(admin.TabularInline):

ここに画像の説明を挿入

カスタム背景変更リスト

デフォルトでは、Django は各オブジェクトの str() によって返された値を表示します。しかし、個々のフィールドを表示できると便利な場合があります。
polls/admin.py

from django.contrib import admin
from .models import Question,Choice
class ChoiceInline(admin.TabularInline):
    model=Choice
    extra=3
class QuestionAdmin(admin.ModelAdmin):
    fieldsets=[
        (None,{
    
    'fields':['question_text']}),
        ('Date information',{
    
    'fields':['pub_date'],'classes':['collapse']}),
    ]
    inlines=[ChoiceInline]
    list_display=('question_text','pub_date','was_published_recently')
admin.site.register(Question,QuestionAdmin)

ここに画像の説明を挿入
列ヘッダーをクリックして行をソートできるようになりました - was_published_recently 列
polls/models.pyを除く

import datetime
from django.contrib import admin
from django.db import models
from django.utils import timezone

class Question(models.Model):
    question_text = models.CharField(max_length=200)#CharField字符字段
    pub_date=models.DateTimeField('date published')#DateTimeField日期时间字段
    def __str__(self):
        return self.question_text
    @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
class Choice(models.Model):
    question=models.ForeignKey(Question,on_delete=models.CASCADE)
    choice_text=models.CharField(max_length=200)
    votes=models.IntegerField(default=0)
    def __str__(self):
        return self.choice_text

ここに画像の説明を挿入
ファイルpolls/admin.pyを再度編集して、質問変更ページを最適化します。

class QuestionAdmin(admin.ModelAdmin):
添加
list_filter=['pub_date']

ここに画像の説明を挿入
より多くの機能

像上面一样添加
search_fields=['question_text']

ここに画像の説明を挿入

背景のインターフェイスとスタイルをカスタマイズする

プロジェクトのテンプレートをカスタマイズする プロジェクト ディレクトリ
( manage.pyを含むフォルダー) 内にtemplatesという名前のディレクトリを作成します。
mysite/settings.py

TEMPLATES = [
    {
    
    
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [BASE_DIR/'templates'],
        'APP_DIRS': True,
        'OPTIONS': {
    
    
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

テンプレート ディレクトリに admin という名前のディレクトリを作成します。D:\Program Files\JetBrains\PyCharm\vens\Django官方文档学习\Lib\site-packages\django\contrib\admin\templates\adminこのディレクトリには、Django の既定のテンプレート ディレクトリ ( ) が格納されます。見つからない場合は実行してみてください

python -c "import django; print(django.__path__)"

テンプレート ファイルを、プロジェクトで作成したばかりのディレクトリbase_site.htmlに。ファイル(中かっこを含む)を編集して
ここに画像の説明を挿入
Web サイトの名前に置き換え、コンテンツを次のように変更します。{ { site_header|default:_('Django administration') }}

{% 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 %}

背景のホームページをカスタマイズする

デフォルトでは、INSTALLED_APPS で構成され、バックグラウンド アプリケーションを通じて登録されたすべてのアプリケーションがピンインでソートされて表示されます。このページのレイアウトを大幅に変更したい場合があります。結局のところ、インデックス ページはバックグラウンドで重要なページであり、使いやすいはずです。

カスタマイズする必要があるテンプレートは、admin/index.html です。(前のセクションで admin/base_site.html に対して行ったように、このファイルを変更します。このファイルをデフォルト ディレクトリからカスタム テンプレート ディレクトリにコピーします)。このファイルを開くと、app_list というテンプレート変数が使用されていることがわかります。この変数には、インストールされているすべての Django アプリケーションが含まれます。この変数は、任意のハードコードされたリンク (特定のオブジェクトの管理ページへのリンク) に置き換えることができます。

これで、初心者向けのチュートリアルは終了です。

おすすめ

転載: blog.csdn.net/weixin_46322367/article/details/129800857