Настройка django-комментариев - PullRequest
0 голосов
/ 08 декабря 2009

Итак, я использую django.contrib.comments. Я установил его ОК, но вместо громоздкой формы комментария по умолчанию я бы хотел использовать пользовательский шаблон формы, который просто показывает текстовую область и кнопку отправки.

Основанием для этого является то, что пользователь видит форму только в том случае, если его область уже аутентифицирована, и я хотел бы, чтобы форма была простой и автоматически выбирала свое имя пользователя и т. Д.

Я реализовал пользовательскую форму, но получаю сообщение об ошибке при попытке отправить ее.

Вот что у меня есть в шаблоне для страницы с формой комментария (запись - это объект, переданный из представления):

{% load comments %}
{% render_comment_form for entry %}

А вот мой HTML в /templates/comments/form.html:

{% if user.is_authenticated %}
    <p>Submit a comment:</p>
    <form action="/comments/post/" method="post">
    <textarea name="comment" id="id_comment" rows="2" style="width: 90%;"></textarea>
            <input type="hidden" name="options" value="{{ options }}" />
            <input type="hidden" name="target" value="{{ target }}" />
            <input type="hidden" name="gonzo" value="{{ hash }}" />
            <input type="hidden" name="next" value="{{ entry.get_absolute_url }}" /> 
             <span style="float:right;"><input type="submit" name="post" value="Add"></span>
    </form>
    {% else %}
        <p>Please <a href="/login/">log in</a> to post a comment.</p>
    {% endif %}

Сначала он отображается нормально, но когда я пытаюсь отправить форму комментария, я получаю следующую ошибку Django:

Comment post not allowed (400)
Why:    Missing content_type or object_pk field.

Может кто-нибудь помочь?

Ответы [ 2 ]

1 голос
/ 08 декабря 2009

Исправлена ​​проблема путем копирования из приложения Теджу - в частности, см. Комментарий Джошуа Воркс к части 2.

1 голос
/ 08 декабря 2009

Модель комментария использует общий внешний ключ для сопоставления с объектом, для которого был сделан комментарий, таким как запись в блоге. Это обязательные скрытые поля, включенные в стандартную форму комментариев.

От django.contrib.comments.models

...
class CommentSecurityForm(forms.Form):
    """
    Handles the security aspects (anti-spoofing) for comment forms.
    """
    content_type  = forms.CharField(widget=forms.HiddenInput)
    object_pk     = forms.CharField(widget=forms.HiddenInput)
...

Если вы не изменили класс формы и хотите изменить только HTML-шаблон, вы можете включить эти поля, добавив цикл for для всех скрытых полей.

{% for hidden in form.hidden_fields %}
    {{ hidden }}
{% endfor %}
...