diff --git a/python-total/dia_16/README.md b/python-total/dia_16/README.md index 9d82c90..0460aa4 100644 --- a/python-total/dia_16/README.md +++ b/python-total/dia_16/README.md @@ -330,8 +330,107 @@ Si añadimos una nueva tarea veremos que nos permite añadir los campos que indi ![](../img/dia16_20.png) +He añadido tres tareas para las pruebas. + ## 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 +

Lista de pendientes

+ + + + + {% for tarea in object_list %} + + + + {% empty %} +

No hay elementos en esta lista

+ {% endfor %} +
Elementos
{{ tarea.titulo }}
+``` + +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.8. - Crear Links a Detalle diff --git a/python-total/dia_16/mi_web/src/proyecto/base/templates/base/tarea_list.html b/python-total/dia_16/mi_web/src/proyecto/base/templates/base/tarea_list.html new file mode 100644 index 0000000..481b747 --- /dev/null +++ b/python-total/dia_16/mi_web/src/proyecto/base/templates/base/tarea_list.html @@ -0,0 +1,19 @@ +

Lista de pendientes

+ + + + + + + {% for tarea in tareas %} + + + + + + {% empty %} +

No hay elementos en esta lista

+ + {% endfor %} + +
Elementos
{{ tarea.titulo }}
\ No newline at end of file diff --git a/python-total/dia_16/mi_web/src/proyecto/base/urls.py b/python-total/dia_16/mi_web/src/proyecto/base/urls.py index 49cbcbb..3c7038e 100644 --- a/python-total/dia_16/mi_web/src/proyecto/base/urls.py +++ b/python-total/dia_16/mi_web/src/proyecto/base/urls.py @@ -1,7 +1,7 @@ from django.urls import path -from . import views +from .views import ListaPendientes urlpatterns = [ - path('', views.lista_pendientes, name='pendientes') + path('', ListaPendientes.as_view(), name='pendientes') ] diff --git a/python-total/dia_16/mi_web/src/proyecto/base/views.py b/python-total/dia_16/mi_web/src/proyecto/base/views.py index 79a076f..dfae1fd 100644 --- a/python-total/dia_16/mi_web/src/proyecto/base/views.py +++ b/python-total/dia_16/mi_web/src/proyecto/base/views.py @@ -1,8 +1,10 @@ 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. -def lista_pendientes(pedido): - return HttpResponse('Lista de pendientes') +class ListaPendientes(ListView): + model = Tarea + context_object_name = 'tareas' diff --git a/python-total/dia_16/mi_web/src/proyecto/proyecto/settings.py b/python-total/dia_16/mi_web/src/proyecto/proyecto/settings.py index 9ebf15b..48da6bf 100644 --- a/python-total/dia_16/mi_web/src/proyecto/proyecto/settings.py +++ b/python-total/dia_16/mi_web/src/proyecto/proyecto/settings.py @@ -55,7 +55,7 @@ ROOT_URLCONF = 'proyecto.urls' TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', - 'DIRS': [], + 'DIRS': ['../base/templates'], 'APP_DIRS': True, 'OPTIONS': { 'context_processors': [ diff --git a/python-total/img/dia16_21.png b/python-total/img/dia16_21.png new file mode 100644 index 0000000..5ffd8d8 Binary files /dev/null and b/python-total/img/dia16_21.png differ diff --git a/python-total/img/dia16_22.png b/python-total/img/dia16_22.png new file mode 100644 index 0000000..7a0d0cf Binary files /dev/null and b/python-total/img/dia16_22.png differ diff --git a/python-total/img/dia16_23.png b/python-total/img/dia16_23.png new file mode 100644 index 0000000..f08788d Binary files /dev/null and b/python-total/img/dia16_23.png differ