2010-03-06 3 views
14

Я читал django docs о структуре комментариев и настройке (http://docs.djangoproject.com/en/1.1/ref/contrib/comments/custom/) На этой странице показано, как добавить новых полей в форму. Но то, что я хочу сделать, это удалить unnecesary поля, как URL, адрес электронной почты (среди других мелких модов.)Как расширить рамки комментариев (django), удалив ненужные поля?

В той же доке страницы он говорит, что путь, чтобы продлить пользовательские комментарии класса от BaseCommentAbstractModel, но это в значительной степени, я зашел так далеко, и теперь я в недоумении. Я не мог найти ничего в этом конкретном аспекте.

+0

Зачем вам их удалять? Если вы их вытащите, у вас не будет проблем с любым подключаемым приложением, которое использует структуру комментариев? Они на самом деле не навредят, и объем дискового пространства, который они потребляют, ничтожно. – Tom

+1

Я не имею в виду удалить их, как я хочу пойти и взломать код комментария. Я просто хочу опустить их в этом конкретном приложении. Отказ от ответственности: Я надеюсь, что есть лучший способ, чем спрятать его с помощью css и назначить эти поля нулевыми значениями за кулисами, поэтому воздержитесь от публикации ответа, если только он не скажет мне, что это единственный способ сделать это. :) – Nacho

ответ

12

Недавно я реализовал решение, о котором упомянул Офри, поскольку я только хотел принять одиночное поле «комментарий» для комментария (например, SO does, no «name», no «email» и «url»).

Чтобы настроить форму комментариев по умолчанию и отображение списка, я создал каталог «комментарии» в моем корневом каталоге «шаблоны» и переопределил два шаблона комментариев по умолчанию.

Мой «/templates/comments/form.html» является:

{% 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 %} 

Который лишь немного отличается от комментариев по умолчанию формы в первую очередь подавляя отображение «имя» не-требуется, «электронная почта "и" url ".

Мой «/templates/comments/list.html» является:

<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 %} 

На странице я хочу форму, я сначала вызвать {% load comments %}, а затем {% render_comment_form for [object] %}, чтобы показать форму, или {% render_comment_list for [object] %} для генерации список комментариев к объекту (замените [object] на соответствующее имя объекта).

Это работает отлично подходит для меня, и до сих пор дает мне все другие «свободный» материал, который поставляется с Джанго комментарии (умеренность, маркировки, каналы, полиморфные ассоциации, и т.д. ...)

+1

Прошло некоторое время, но это именно то, что мне тогда нужно. Благодаря! – Nacho

+0

Как вы скажите приложению комментариев использовать свои собственные шаблоны? – john2x

+0

Просто разместите свои собственные шаблоны с именем «form.html» и «list.html» в каталоге «комментарии» в каталоге шаблонов. – mitchf

2

Вы можете попробовать overriding the comment form with a custom template, который отображает только те поля, которые вы хотите.

+0

Ofri, если вы прочтете мой комментарий по этому вопросу, вы увидите, что это то, чего я хочу избежать, по крайней мере в идеале. Спасибо, в любом случае. – Nacho

+0

Я прочитал ваш комментарий, и я не предлагаю вам скрывать поля с помощью CSS.Вы не будете отображать поля в своем шаблоне, и поэтому они никогда не будут существовать. Его чистое решение, и все используют его, насколько я знаю. Вы можете придумать новое колесо, если хотите. –

+0

Мой плохой! Таким образом, ответ мог быть там все время. Итак, если я просто не выдаю эти поля, они просто не понадобятся, и среда игнорирует их? – Nacho

4

Аккуратный краткое изложение как сделать это элегантно, благодаря фактической комментарии рамочным подклассов подхода, а не пряча элементов в виде/другие неопрятных писак, можно найти Django Comments: Want to remove user URL, not expand the model. How to?

по сути, вы подкласс CommentForm и изменить свой метод get_comment_create_data (Self), а затем вытащите атрибуты, которые вы не хотите (например, электронная почта, URL-адрес и т. д.)

J

Смежные вопросы