django-комментарии вопросы - PullRequest
0 голосов
/ 16 июля 2011

Я только что реализовал django-комментарии.

settings.py

INSTALLED_APPS = (
    ...
    'django.contrib.comments',
)

product_detail.html

{% get_comment_count for product as comment_count %}
<p>This event has {{ comment_count }} comments.</p>

{% render_comment_list for product %}
{% render_comment_form for product %}

шаблоны / комментарии / form.html

{% load comments i18n %}
{% if user.is_authenticated %}
    <form action="{% comment_form_target %}" method="post">
        {% csrf_token %}
        <input type="hidden" name="next" value="/product/{{ product.id }}/" />
        {% 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 %}

шаблоны / комментарии / list.html

<div class="comment_start"></div>
{% for comment in comment_list reversed %}
    <div class="comment">
       {{ comment.comment }} 
       (from <a href="/user/{{ comment.user }}/">{{ comment.user }}</a> - {{ comment.submit_date|timesince }} ago)
    </div>
{% endfor %}

Когда формаотображается HTML-код:

1  <form action="/comments/post/" method="post"> 
2    <div style='display:none'><input type='hidden' name='csrfmiddlewaretoken' value='39cad78f1b4adef30adb536717cesd71' /></div> 
3    <input type="hidden" name="next" value="/product/1/" /> 
4    <input type="hidden" name="content_type" value="myapp.product" id="id_content_type" /> 
5    <input type="hidden" name="object_pk" value="2" id="id_object_pk" /> 
6    <input type="hidden" name="timestamp" value="1310776114" id="id_timestamp" /> 
7    <input type="hidden" name="security_hash" value="34efe5f91239db95f429d07ec21a2926bf22a905b65" id="id_security_hash" /> 
8    <p><textarea id="id_comment" rows="10" cols="40" name="comment"></textarea></p> 
9    <p style="display:none;">
10        <input type="text" name="honeypot" id="id_honeypot" /> 
11   </p>    
12   <input type="submit" name="post" class="submit-post" value="Add Comment" /> 
13  </form> 

Вопросы:

  • Смотрите в строке 4. Это нормально, есть это значение?
  • Это хорошо?способ (с переопределением form.html) для удаления имени, поля фамилии и URL-адреса из формы?
  • Это нормально, этот жесткий код?value="/product/{{ product.id }}/
  • Я бы вставил комментарий с помощью ajax / jquery, а не с полным обновлением страницы, это возможно?

Спасибо всем.

1 Ответ

2 голосов
/ 16 июля 2011

Строка 4 кажется нормальной?По крайней мере, я не вижу проблем;) Но, конечно, всегда проверяйте ваш код:)

Удаление немного хакерское, но это также потому, что язык шаблонов немного ограничен.Если у вас есть последняя версия, вы, вероятно, можете использовать оператор in, хотя: https://docs.djangoproject.com/en/dev/ref/templates/builtins/#in-operator

Жесткое кодирование не в порядке, используйте шаблон URL тега: https://docs.djangoproject.com/en/dev/ref/templates/builtins/?from=olddocs#url

Вы можете сделать это с Ajax,Я сделал это для приложения комментариев, используя Dajax (приложение django; http://www.dajaxproject.com) и просто вызывая представление из функции dajax, но вы также можете вызывать его из другой функции.Мое решение состояло в том, чтобы позволить Dajax визуализировать HTML-фрагмент, и просто отправить его обратно, а также использовать этот фрагмент из основного шаблона.Таким образом, код макета был в одном месте (хотя и не очень эффективным для использования в сети).

...