Каскадные комментарии - токен csrf и имя пользователя - PullRequest
1 голос
/ 30 января 2011

Я использую django-threadadedcomments. Все отлично работает, кроме двух вещей: токена csrf и тега шаблона пользователя.

Проблема в том, что когда пользователь отправляет комментарий, для формы не существует токена csrf, поэтому форма не может быть проверена на стороне сервера. Попытка добавления токена csrf в словари, которые пронизывают комментарии к комментариям, но без результата; продолжал получать ошибки (большинство из них сказали, что этот метод принимает только 2 аргумента с 3 данными). Попытался исправить эти методы, чтобы они принимали 3 аргумента и просто передавали третий; безуспешно.

Кто-то сталкивался с той же проблемой в прошлом и решил ее? потому что это не приемлемое для меня решение:

MIDDLEWARE_CLASSES = (
    #'django.middleware.csrf.CsrfViewMiddleware',
)

Второй - есть помощник HTML для получения user_id для пользователя, который оставил комментарий. Есть ли в коробке вспомогательный html-помощник для получения имени пользователя по идентификатору или мне придется написать его самому?

http://code.google.com/p/django-threadedcomments/

Вот код для проекта, я не могу точно сказать, какие его фрагменты должны быть здесь размещены, поэтому я просто даю ссылку на весь проект.

Я действительно застрял здесь, и любая помощь будет приветствоваться.

Заранее спасибо.

Ответы [ 3 ]

1 голос
/ 30 января 2011

Попытка добавления токена csrf в словари с резьбовыми комментариями проходит внутренний без результата;

csrf_token - это тег шаблона - его нельзя передавать в качестве аргумента где-либо.

Я посмотрел на threadedcomments, и он основан на contrib.comments без рендеринга html, поэтому вы можете вставить csrf_token в ваш шаблон.

Как выглядит код TEMPLATE, отображающий код формы?

Если у вас включен CsrfViewMiddleware и вы используете RequestContext в своем представлении, вам просто нужно добавить {% csrf_token %} внутри ваших тегов <form></form>.

Что касается получения имени пользователя :
ThreadedComment - это подкласс Comment со свойством name, или вы можете просто получить прямой доступ к User ...

{% for comment in comments % 
    {{ comment.user.first_name }}
    {{ comment.name }}
{% endfor %}
1 голос
/ 30 января 2011

Вы должны использовать {% csrf_token %} тег или @csrf_protect в представлениях

0 голосов
/ 07 мая 2011

Вы можете поместить свою форму в свой собственный шаблон и {% include %} в шаблон своей страницы.Начиная с Django 1.3, {% include %} может передавать переменные контекста во включенный шаблон.Вот что я использую с django.contrib.comments вместо тега шаблона:

...
{% include "comments/comment-form.html" with content_object=article user=request.user %}
...

{%csrf_token %} работает в этом включенном шаблоне, потому что он использует ваш контекст основного вида.

...