martes, 23 de enero de 2018

Configurando Vistas, Rutas y Plantillas en Django

Vistas

Las vistas en Django son funciones que pueden traer o no información de la base de datos, un ejemplo de vista es la siguiente:

def index(request):
latest_question_list = Question.objects.order_by('-pub_date')[:
context = {'latest_question_list': latest_question_list}
return render(request,'polls/index.html',context)

para validar que la informacion de la base de datos no se envié vacía, django tiene los métodos get_object_or_404 y get_list_or_404, un ejemlpo de este tipo de métodos es:

def detail(request,question_id):
question = get_object_or_404(Question, pk=question_id)
return render(request,'polls/detail.html',{'question':question})

Rutas

Las rutas se les puede definir un nombre para que se diferencien de las rutas de las otras aplicaciones  en el proyecto y sea mas fácil su modificación  , el nombre se define con la linea:

app_name = 'polls'

y para agregar una nueva ruta podemos utilizar la siguiente sintaxis:

 path('<int:question_id>/',views.detail,name='detail'),

estas configuraciones se hacen en el archivo ubicado en polls/urls.py  y en el archivo mysitio/urls.py  se configura con el método include, esto sirve para llamar todas las rutas definidas en polls/urls.py, el método include quedaría de la siguiente forma:

from django.urls import include,path
path('polls/',include('polls.urls')),

Plantillas 

para invocar una ruta desde la plantilla utilizando el nombre que se definió, se utiliza el siguiente código:

<li><a href="{% url 'polls:detail' question_id %}">{{question.question_text}}</a></li>

un ejemplo de la potencia de las plantillas de django lo podemos observar en el siguiente código:

<h1>{{question.question_text}}</h1>
<ul>
{%for choice in question.choice_set.all%}
<li>{{choice.choice_text}}</li>
{%endfor%}
</ul>

el cual realiza un inner join en la vista y trae la información tanto de la pregunta como de las opciones con solo la linea for choice in question.choice_set.all







No hay comentarios:

Publicar un comentario