Update day 16

Signed-off-by: Manuel Vergara <manuel@vergaracarmona.es>
This commit is contained in:
Manuel Vergara 2023-05-21 18:50:15 +02:00
parent d795c56835
commit 15ae6ed3da
8 changed files with 126 additions and 6 deletions

View File

@ -330,8 +330,107 @@ Si añadimos una nueva tarea veremos que nos permite añadir los campos que indi
![](../img/dia16_20.png) ![](../img/dia16_20.png)
He añadido tres tareas para las pruebas.
## 16.6. - Configurar la vista ## 16.6. - Configurar la vista
Después de la prueba anterior vamos a traer una lista de objetos dinámica desde el fichero `base/views.py`. Importamos ListView:
```python
from django.views.generic.list import ListView
```
Creamos una clase que recoja la función. Para funcionar requiere de un módelo (lista de objetos completa) y un query set que haga la consulta filtrada de objetos. Pero tendremos que importar la Tarea de models:
```python
from .models import Tarea
```
La clase queda así:
```python
class ListaPendientes(ListView):
model = Tarea
```
Por ahora, el documento base/views.py lo tenemos así:
```python
from django.shortcuts import render
from django.views.generic.list import ListView
from .models import Tarea
# Create your views here.
class ListaPendientes(ListView):
model = Tarea
```
Vamos a `base/urls.py` donde tendremos que indicar que importar la ListaPendientes:
```python
from .views import ListaPendientes
```
También tenemos que cambiar el path añadiendo la ListaPendientes e indicando que lo lea como vista. El documento queda así:
```python
from django.urls import path
from .views import ListaPendientes
urlpatterns = [
path('', ListaPendientes.as_view(), name='pendientes')
]
```
Ya hemos conectado la url a nuestra vista pero aun no hemos dicho como debe mostrarlo. Por eso, si entramos en la url nos da un error que nos indica que no existe el template, etc
![](../img/dia16_21.png)
Entonces, para indicar las plantillas tenemos que ir a proyecto/settings.py e indicar el path de donde coger las plantillas en DIRS. El fragmento de código entero es el siguiente:
```python
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': ['../base/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',
],
},
},
]
```
Vamos a crear la plantilla que nos dice, pero en una carpeta dentro de base que le llamaremos templates, y dentro con otro directorio que se llame base. Dentro crearemos el html que nos pide.
![](../img/dia16_22.png)
En este fichero vamos a añadir el texto html que queramos.
```html
<h1>Lista de pendientes</h1>
<table>
<tr>
<th>Elementos</th>
</tr>
{% for tarea in object_list %}
<tr>
<td>{{ tarea.titulo }}</td>
</tr>
{% empty %}
<h3>No hay elementos en esta lista</h3>
{% endfor %}
</table>
```
Entonces, ya veremos nuestra lista en la url:
![](../img/dia16_23.png)
Para personalizar el object_list y que sea más legible, vamos a views y añadimos esta línea a la clase ListaPendientes:
```python
context_object_name = 'tareas'
```
Ya lo podemos cambiar por tareas.
## 16.7. - Configurar la vista de Detalle ## 16.7. - Configurar la vista de Detalle
## 16.8. - Crear Links a Detalle ## 16.8. - Crear Links a Detalle

View File

@ -0,0 +1,19 @@
<h1>Lista de pendientes</h1>
<table>
<tr>
<th>Elementos</th>
</tr>
{% for tarea in tareas %}
<tr>
<td>{{ tarea.titulo }}</td>
</tr>
{% empty %}
<h3>No hay elementos en esta lista</h3>
{% endfor %}
</table>

View File

@ -1,7 +1,7 @@
from django.urls import path from django.urls import path
from . import views from .views import ListaPendientes
urlpatterns = [ urlpatterns = [
path('', views.lista_pendientes, name='pendientes') path('', ListaPendientes.as_view(), name='pendientes')
] ]

View File

@ -1,8 +1,10 @@
from django.shortcuts import render from django.shortcuts import render
from django.http import HttpResponse from django.views.generic.list import ListView
from .models import Tarea
# Create your views here. # Create your views here.
def lista_pendientes(pedido): class ListaPendientes(ListView):
return HttpResponse('Lista de pendientes') model = Tarea
context_object_name = 'tareas'

View File

@ -55,7 +55,7 @@ ROOT_URLCONF = 'proyecto.urls'
TEMPLATES = [ TEMPLATES = [
{ {
'BACKEND': 'django.template.backends.django.DjangoTemplates', 'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [], 'DIRS': ['../base/templates'],
'APP_DIRS': True, 'APP_DIRS': True,
'OPTIONS': { 'OPTIONS': {
'context_processors': [ 'context_processors': [

Binary file not shown.

After

Width:  |  Height:  |  Size: 365 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB