Aprendizaje de documentos de Django 4.0 (4)

Artículo anteriorDjango 4.0 Document Learning (4)

Escribe tu primera aplicación Django, Parte 6

Personaliza la interfaz y el estilo de la aplicación

Primero, cree un directorio llamado estático en su directorio de encuestas. Django buscará archivos estáticos en este directorio, de forma similar a como Diango busca plantillas en el directorio polls/templates/.
encuestas/estática/encuestas/estilo.css

li a {
    
    
    color: green;
}

encuestas/plantillas/encuestas/index.html
agregar

{% load static %}
<link rel="stylesheet" type="text/css" href="{% static 'polls/style.css' %}">

Estilo modificado con éxito
inserte la descripción de la imagen aquí
Agregue una imagen de fondo
Cree un subdirectorio denominado imágenes en el directorio sondeos/estático/encuestas. En este directorio, coloque una imagen llamada background.jpg.
encuestas/estática/encuestas/style.css
añadir

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

La imagen de fondo se puede encontrar al azar, no coincide muy bien, no importa, solo aprende a configurar el estilo.
inserte la descripción de la imagen aquí

Escribe tu primera aplicación Django, Parte 7

Personaliza el formulario de fondo

Antes de la modificación:
inserte la descripción de la imagen aquí
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)

Se cambió el orden de las fechas y las preguntas
inserte la descripción de la imagen aquí
Dividir el formulario en varios conjuntos de campos:
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)

inserte la descripción de la imagen aquí
Agregar objetos asociados
Ahora tenemos la página de fondo para votar. Sin embargo, una pregunta tiene varias opciones, pero la página de fondo no muestra varias opciones.
encuestas/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)

Este código le dice a Django: "Los objetos de elección deben editarse en la página de administración de preguntas. Por defecto, 3 campos son suficientes para las opciones".
Cargue la página "Agregar encuesta" para ver cómo se ve:
inserte la descripción de la imagen aquí
hay tres espacios de elección asociados: representado por definición adicional, y cada vez que regrese a la página "Modificar" para cualquier objeto creado, verá tres nuevas ranuras.
Si desea eliminar un socket existente, puede hacer clic en la X en la esquina superior derecha del socket.
inserte la descripción de la imagen aquí
Sin embargo, todavía hay un pequeño problema. Se necesita una gran cantidad de área de pantalla para mostrar los campos de todos los objetos Elección asociados. Para este problema, Django proporciona una forma de mostrar objetos relacionados en una sola fila en formato tabular. Para usarlo, simplemente modifique la declaración de ChoiceInline de la siguiente manera:
polls/admin.py

class ChoiceInline(admin.TabularInline):

inserte la descripción de la imagen aquí

Lista de cambios de fondo personalizada

Por defecto, Django muestra el valor devuelto por str() para cada objeto. Pero a veces es más útil si podemos mostrar campos individuales.
encuestas/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)

inserte la descripción de la imagen aquí
Las filas ahora se pueden ordenar haciendo clic en los encabezados de las columnas, excepto en la columna 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

inserte la descripción de la imagen aquí
Edite el archivo polls/admin.py nuevamente para optimizar la página de cambio de pregunta

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

inserte la descripción de la imagen aquí
más funciones

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

inserte la descripción de la imagen aquí

Personaliza la interfaz y el estilo de fondo

Personalice las plantillas para su proyecto Cree un directorio llamado templates
dentro del directorio de su proyecto ( la carpeta que contiene manage.py ). misitio/configuraciones.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',
            ],
        },
    },
]

Cree un directorio llamado admin en el directorio de plantillas, que almacenará el directorio de plantillas predeterminado de Django ( D:\Program Files\JetBrains\PyCharm\vens\Django官方文档学习\Lib\site-packages\django\contrib\admin\templates\admin). Este es mi directorio, puede encontrar el suyo propio, que es el directorio donde se coloca el paquete pip en el entorno o entorno virtual. Si no lo encuentra, intente ejecutar

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

Copie el archivo de plantilla base_site.htmlen el directorio que acaba de crear en su proyecto. Edite y reemplace el archivo (incluidos los corchetes)
inserte la descripción de la imagen aquí
con el nombre de su sitio web para modificar el contenido como{ { 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 %}

Personaliza la página de inicio de fondo

Por defecto, muestra todas las aplicaciones configuradas en INSTALLED_APPS, registradas a través de la aplicación en segundo plano, ordenadas por pinyin. Es posible que desee realizar cambios significativos en el diseño de esta página. Después de todo, la página de índice es una página importante en segundo plano y debería ser fácil de usar.

La plantilla que debe personalizarse es admin/index.html. (Modifique este archivo como lo hizo para admin/base_site.html en la sección anterior: copie este archivo del directorio predeterminado a su directorio de plantillas personalizadas). Abra este archivo y verá que usa una variable de plantilla llamada app_list. Esta variable contiene todas las aplicaciones Django instaladas. Puede sustituir esta variable con cualquier enlace codificado que desee (enlace a la página de administración de un objeto en particular).

Esto concluye el tutorial para principiantes.

Supongo que te gusta

Origin blog.csdn.net/weixin_46322367/article/details/129800857
Recomendado
Clasificación