我正在使用django-threadedcomments。一切正常,除了两件事:csrf令牌和用户模板标签。
问题是,当用户提交注释时,表单没有csrf标记,因此无法在服务器端验证表单。尝试将csrf标记添加到线程注释传递到内部但没有结果的字典;不断收到错误(大多数人都说这个方法只有2个参数,只有3个)。试图修复那些接受3个参数的方法,然后再传递第三个参数;没有成功。
有人在过去偶然遇到同样的问题并解决了吗?因为这对我来说不是一个可以接受的解决方案:
MIDDLEWARE_CLASSES = (
#'django.middleware.csrf.CsrfViewMiddleware',
)
第二个 - 有一个HTML帮助器来获取发布评论的用户的user_id。是否有开箱即用的html帮助器来获取用户名或者我必须自己编写它?
http://code.google.com/p/django-threadedcomments/
这是该项目的代码,我无法确切地告诉它应该在哪里发布,所以我只是链接到整个项目。
我真的被困在这里,欢迎任何帮助。
提前致谢。
答案 0 :(得分:1)
您应该在视图中使用{% csrf_token %}
代码或@csrf_protect
答案 1 :(得分: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 %}
答案 2 :(得分:-1)
您可以将表单放在自己的模板中,并将{% include %}
放入页面模板中。从Django 1.3开始,{% include %}
可以将上下文变量传递给包含的模板。以下是我使用django.contrib.comments
而不是模板标签的内容:
...
{% include "comments/comment-form.html" with content_object=article user=request.user %}
...
{%csrf_token %}
适用于此附带的模板,因为它正在使用您的主视图上下文。