Update day 16
Signed-off-by: Manuel Vergara <manuel@vergaracarmona.es>
This commit is contained in:
parent
d795c56835
commit
15ae6ed3da
@ -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
|
||||||
|
@ -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>
|
@ -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')
|
||||||
]
|
]
|
||||||
|
@ -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'
|
||||||
|
@ -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': [
|
||||||
|
BIN
python-total/img/dia16_21.png
Normal file
BIN
python-total/img/dia16_21.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 365 KiB |
BIN
python-total/img/dia16_22.png
Normal file
BIN
python-total/img/dia16_22.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 12 KiB |
BIN
python-total/img/dia16_23.png
Normal file
BIN
python-total/img/dia16_23.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 25 KiB |
Loading…
Reference in New Issue
Block a user