2010-03-06 15 views
14

He estado leyendo en los documentos de django sobre el marco de comentarios y cómo personalizarlo (http://docs.djangoproject.com/en/1.1/ref/contrib/comments/custom/) En esa página, se muestra cómo agregar campos nuevos a un formulario. Pero lo que quiero hacer es eliminar campos innecesarios, como URL, correo electrónico (entre otras modificaciones de menor importancia.)¿Cómo ampliar el marco de comentarios (django) eliminando campos innecesarios?

En esa misma página doc dice que el camino a seguir es extender mi clase de comentarios personalizados a partir BaseCommentAbstractModel, pero eso es más o menos, he llegado tan lejos y ahora estoy perdido. No pude encontrar nada en este aspecto específico.

+0

¿Por qué es necesario eliminarlos? Si los saca, ¿no tendrá problemas con cualquier aplicación conectable que utilice el marco de comentarios? En realidad, no están haciendo ningún daño y la cantidad de espacio en disco que consumen es insignificante. – Tom

+1

No me refiero a eliminarlos como quiero ir y piratear el código de comentarios. Solo quiero omitirlos en esta aplicación específica. Descargo de responsabilidad: Espero que haya una manera más agradable que ocultarlo con CSS y asignar a esos campos valores nulos detrás de las escenas, así que absténgase de publicar esa respuesta, a menos que sea para decirme que es la única forma de hacerlo. :) – Nacho

Respuesta

12

Recientemente implementé la solución que Ofri mencionó, ya que solo quería aceptar un campo de "comentario" solitario para un comentario (como SO does, no "name", no "email" y no "url").

Para personalizar el formulario de comentarios predeterminado y la visualización de lista, creé un directorio de "comentarios" en mi directorio raíz "plantillas" y anulé las dos plantillas de comentarios predeterminadas.

Mi "/templates/comments/form.html" es:

{% load comments i18n %} 
{% if user.is_authenticated %} 
    <form action="{% comment_form_target %}" method="post"> 
     {% csrf_token %} 
     {% if next %}<input type="hidden" name="next" value="{{ next }}" />{% endif %} 
     {% for field in form %} 
      {% if field.is_hidden %} 
       {{ field }} 
      {% else %} 
       {% if field.name != "name" and field.name != "email" and field.name != "url" %} 
        {% if field.errors %}{{ field.errors }}{% endif %} 
        <p {% if field.errors %} class="error"{% endif %} {% ifequal field.name "honeypot" %} style="display:none;"{% endifequal %}> 
        {{ field }} 
        </p> 
       {% endif %} 
      {% endif %} 
     {% endfor %} 
     <input type="submit" name="post" class="submit-post" value="{% trans "Add Comment" %}" /> 
    </form> 
{% else %} 
    I'm sorry, but you must be <a href="javascript:alert('send to login page')">logged in</a> to submit comments. 
{% endif %} 

que es sólo ligeramente diferente de la forma predeterminada comentarios, suprimiendo principalmente la pantalla del "nombre" no es obligatorio- "correo electrónico "y" url "entradas.

Mi "/templates/comments/list.html" es:

<div class="comment_start"></div> 
{% for comment in comment_list %} 
    <div class="comment"> 
     {{ comment.comment }} 
     (from <a href="javascript:alert('show user profile/stats')">{{ comment.user }}</a> - {{ comment.submit_date|timesince }} ago) 
    </div> 
{% endfor %} 

En la página Quiero que el formulario, primera llamada {% load comments %} y luego {% render_comment_form for [object] %} para mostrar el formulario, o para generar un {% render_comment_list for [object] %} lista de los comentarios sobre el objeto (reemplace [objeto] con su nombre de objeto apropiado).

Esto funciona muy bien para mí, y todavía me da todas las otras cosas "libre" que viene con django comentarios (moderación, marcar, piensos, asociaciones polimórficas, etc ...)

+1

Ha pasado un tiempo, pero esto es exactamente lo que necesitaba en ese momento. ¡Gracias! – Nacho

+0

¿Cómo le dice a la aplicación de comentarios que use sus plantillas personalizadas? – john2x

+0

Simplemente ponga sus propias plantillas llamadas "form.html" y "list.html" en un directorio llamado "comentarios" en su directorio de plantillas. – mitchf

2

Puede probar overriding the comment form with a custom template que solo muestra los campos que desea.

+0

Ofri, si lees mi comentario sobre la pregunta, verás que esto es algo que quiero evitar, al menos idealmente. Gracias de cualquier manera. – Nacho

+0

Leí tu comentario y no sugiero que ocultes los campos con CSS.No representará los campos en su plantilla y, por lo tanto, nunca existirán. Es una solución limpia, y todos lo usan hasta donde yo sé. Si lo desea, puede inventar una rueda nueva. –

+0

¡Malo! Entonces, la respuesta pudo haber estado ahí todo el tiempo. Entonces, si simplemente no renderizo estos campos, simplemente no serán necesarios y el marco los ignorará. – Nacho

4

un listado ordenado de cómo hacer esto con elegancia, a través del enfoque real de subclases comentarios marco, en lugar de ocultar elementos en una forma/hacks otros desordenados, se pueden encontrar Django Comments: Want to remove user URL, not expand the model. How to?

Esencialmente, usted subclase el CommentForm, y cambiar su método get_comment_create_data (auto), y luego pop out los atributos que no desea (por ejemplo, correo electrónico, url, etc.)

J

Cuestiones relacionadas