Se abre la veda del comentario
Pues ya está, he activado la posibilidad de que los visitantes dejen comentarios. Aunque a ver en que lío me he metido, porque tengo malas experiencias en el pasado sobre los comentarios que deja alguna gente. Y no es que sea demasiado quisquilloso en cuanto a lo que escriben, pero que ya ni se esfuerzen ni se entienda... desmoraliza un rato.
Me ha constado un cierto tiempo el incluir el código para los comentarios (especialmente el conseguir este tiempo para dedicarlo a esto). ¡Y eso que Django viene con 'bateries included'! Claro que se pueden instalar estos comentarios en unos minutos, pero el hacer que funcionen de una manera un poco más decente, requiere su esfuerzo.
Primero fué conseguir que el formulario se presentase de manera un poco decente en la pantalla (debería ser sólo trabajo de CSS, pero me exigió retocar un poco la template del formulario).
Luego fue hacer que al enviar el comentario, se recargase directamente la página original (y no que te redirijese a una página en blanco con un mensaje de graccias). Para hacer esto me basé en lo comentado en "Simplify Django's Free Comments Redirection". Pero cuidado con las instrucciones, porque solo me sirvieron parcialmente. (Por cierto, que esto y otros snippets de código que me he encontrado ahí me han llevado a pensar que hay que tener cuidado al dejar algo escrito en la red sobre Django, y mencionar con que versión de Django funciona el truco).
He aquí como lo he configurado yo, y en mi caso sí que sólo me hicieron falta cambiar el código en 2 lados, y no hay que tocar nada el código original de Django. (Todo esto escrito es válido para Django 1.0):
1. Modificar el urls.py del proyecto añadiendo una
linea antes de la llamada a comments (esto es importante, tiene
que ser justo la de antes):
# (Valid for Django 1.0+)
# Changing default comment behaviour
( r'^comments/posted/$', 'views.comment_posted' ),
# Django contrib modules
(r'^comments/', include('django.contrib.comments.urls')),
2. Añadir en el views.py el método
comment_posted al que nos referimos en el paso anterior.
En este método se recupera el comentario, del comentario se obtiene el
objeto al que se le ha añadido el comentario, y así obtenemos la
página donde esta el comentario.
# (Valid for Django 1.0+)
from django.http import HttpResponseRedirect
def comment_posted( request ):
# para cuando se publica un post
if request.GET['c']:
comment_id = request.GET['c']
# obtenemos el identificador del comentario
comment = Comment.objects.get(pk=comment_id)
if comment:
# si se ha obtenido el commentario obtenemos la url del post
comment_url = '/#c' + str(comment.pk)
return HttpResponseRedirect( comment.content_object.get_absolute_url() )
# si no se encuentra el comentario, pues vamos al directorio raiz
#(lo habran borrado)
return HttpResponseRedirect( "/" )
10 May 2009
