2011-01-30 8 views
1

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

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

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

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

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

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

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

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

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

+0

Как вы "видите" форму комментариев? включаете ли вы ответ в виде ответа или используете templatetag? –

+0

Используя templatetag – Ruslan

+0

Итак, возможно, вам нужно взломать код template_tags threadedcomments, чтобы отобразить csrf_token внутри формы. –

ответ

1

попытался добавить 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

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

+0

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

+0

Вы пытались использовать метод декоратора? – errx

+0

Кстати: почему вы не хотите использовать CsrfViewMiddleWare? – errx

-1

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

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

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

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