Primeros pasos dificultosos
Bueno, aquí estoy de nuevo. Y aunque no lo parezca ya hay algún cambio en el site. Lo primero es que la pantalla de entrada no es un listado. Ahora sólo se muestra lo último que se haya escrito. (Chorrada de cambio dirá alguno).
Esta pequeña chorrada me supuso mis primeras líneas de código en Django, y al mismo tiempo mis primeros errores. Gran parte de mis problems vinieron de que no leí la documentación y que presupuse mal como funcionaba Django.
Primer Error: No indicar el 'template' usando una vista genérica
Más chulo que un ocho, me hice mi primera vista (fichero views.py). Y era una chorrada, me limitaba a usar la vista genérica para extraer una lista de objetos de la base de datos:
def welcome(request, **kwargs):
return list_detail.object_list(
request,
queryset = Post.objects.published(),
**kwargs
)
welcome.__doc__ = list_detail.object_list.__doc__
Idiota de mi presupuse: si la vista se llama welcome, automáticamente usará una template llamada welcome.html. Pero no, mi vista insistía en cargar la template post_list.html. Pero era un idiota. El nombre de mi vista daba igual, porque estaba usando una vista genérica (list_detail.object_list), y como pone la documentación: si la variable template_name no está especificada, la vista usa un template <model_name>_list.html. Para solucionar el problema sólo tenía que añadir la variable template_name:
def welcome(request, **kwargs):
return list_detail.object_list(
request,
template_name = 'welcome.html',
queryset = Post.objects.published(),
**kwargs
)
welcome.__doc__ = list_detail.object_list.__doc__
¡¡Que sencillo a que sí!! Pues he perdido un montón de tiempo haciendo pruebas y investigando en la dirección equivocada, por no saber como funcionaba el list_detail.object_list. Y también por perder el tiempo intentando usar logs para descubrir la causa del problema. unas cuantas horas perdidas. ¡¡Que burro soy!!
Segunda equivocación
Si la anterior era una chorrada, la segunda es aún más infantil. No había entendido bien como funcionaba el languaje de templates de Django y me puse a escribir algo del estilo:
<h3 class="title">{{ object_list[0].title }}</h3>
Cuando esta no es la sintaxis correcta. Para obtener el primer elemento de una lista se hace de otra manera:
<h3 class="title">{{ object_list.0.title }}</h3>
¡¡Pues sí que era facil!! (Hay que ser furro)
17 January 2009
