Artículo anteriorDjango 4.0 Document Learning (4)
Directorio de artículos
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
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.
Escribe tu primera aplicación Django, Parte 7
Personaliza el formulario de fondo
Antes de la modificación:
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
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)
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:
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.
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):
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)
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
Edite el archivo polls/admin.py nuevamente para optimizar la página de cambio de pregunta
class QuestionAdmin(admin.ModelAdmin):
添加
list_filter=['pub_date']
más funciones
像上面一样添加
search_fields=['question_text']
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.html
en el directorio que acaba de crear en su proyecto. Edite y reemplace el archivo (incluidos los corchetes)
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.