Práctica 2_2 - myTeachingURJC/2018-19-LTAW GitHub Wiki
- Tiempo: 2h
- Fecha: Lunes, 25-Febrero-2019
-
Objetivos de la sesión:
- Manejar plantillas en ficheros externos
- Continuar con la práctica 2
Actividades guiadas por el profesor. Haremos lo siguiente:
Partimos del último ejemplo de la sesión anterior. Añadimos una URL nueva que será el punto de entrada de la página principal: main/. El fichero urls.py es:
from django.conf.urls import include, url
from django.contrib import admin
from mi_tienda.views import mi_funcion
from mi_tienda.views import mi_producto
from mi_tienda.views import saludo
from mi_tienda.views import index
urlpatterns = [
url(r'^main/', index),
url(r'^producto/(\d{1,2})/', mi_producto ),
url(r'^saludo/', saludo),
url(r'^hola/', mi_funcion),
url(r'^test/', include(admin.site.urls)),
]
En el fichero de las vistas, views.py, añadimos la función index que lee la página principal del fichero main.html
from django.http import HttpResponse
from django.template import Template, Context
def index(request):
fp = open('/home/profes/obijuan/templates/main.html')
t = Template(fp.read())
fp.close()
c = Context({'user': 'Obijuan'})
html = t.render(c)
return HttpResponse(html)
#-- Resto del fichero....
En este ejemplo, el fichero main.html está en la ruta: '/home/profes/obijuan/templates/', y es el siguiente:
<!DOCTYPE html>
<html lang="es" dir="ltr">
<head>
<meta charset="utf-8">
<title>Mi tienda</title>
</head>
<body>
<p>Página índice de mi tienda</p>
<p>Bienvenido {{user}}</p>
</body>
</html>
Lanzamos el servidor (en el puerto 8080, por ejemplo)
python manage.py runserver 8080
Y al conectarnos a la URL: http://127.0.0.1:8080/main nos aparecerá la página del fichero main.html:
En vez de usar la ruta completa, es mejor establecer un directorio donde almacenar todas las plantillas. Creamos un directorio llamado templates dentro mi_tienda/mi_tienda. Editamos el archivo settings.py y poner ahí la ruta de las plantillas. En este ejemplo, la ruta a mis plantillas es:
/home/profes/obijuan/github/2018-19-LTAW-practicas/Practica-2/mi_tienda/mi_tienda/templates/
En el fichero settings.py editamos el campo DIRS que está dentro de TEMPLATES, y ponemos la ruta:
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': ['/home/profes/obijuan/github/2018-19-LTAW-practicas/Practica-2/mi_tienda/mi_tienda/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',
],
},
},
]
Y ahora modificamos nuestra función index() en views.py añadiendo la get_template() para leer la plantilla. No hace falta especificar la ruta completa, sólo el nombre del fichero. En nuestro caso main.html
from django.http import HttpResponse
from django.template.loader import get_template
from django.template import Template, Context
def index(request):
t = get_template('main.html')
c = {'user': 'Obijuan'}
html = t.render(c)
return HttpResponse(html)
#-- Resto del fichero views.py
El código queda mucho más compacto y sencillo
Todavía se puede simplificar más usando la función render(). Internamente realiza lo que hemos hecho en los ejemplos anteriores. La nueva función index() para gestionar la página principal quedaría así:
from django.http import HttpResponse
from django.template import Template, Context
from django.shortcuts import render
def index(request):
return render(request, 'main.html', {'user':'Obijuan'})
#-- Resto del fichero views.py
¡Sólo una línea!. A render() le pasamos como parámetros el mensaje de solicitud (request), el nombre de la plantilla y el diccionario con las palabras a sustituir en la plantilla
- Continúa trabajando en tu tienda
- Jose María Cañas
- Juan González-Gómez (Obijuan)