1

我正在使用 django 线程评论。一切正常,除了两件事:csrf 令牌和用户模板标签。

问题是,当用户提交评论时,表单没有 csrf 令牌,因此无法在服务器端验证表单。尝试将 csrf 令牌添加到线程注释在内部传递但没有结果的字典中;不断收到错误(他们中的大多数人告诉这个方法只需要 2 个参数,给出 3 个参数)。试图修复这些方法以接受 3 个参数,然后再传递第三个参数;没有成功。

是否有人在过去偶然发现了同样的问题并解决了它?因为这对我来说不是一个可接受的解决方案:

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

第二个 - 有一个 HTML 助手来获取发布评论的用户的 user_id。是否有一个开箱即用的 html 助手来通过 id 获取用户的名称,还是我必须自己编写?

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

这是该项目的代码,我不能确切地知道应该在这里发布哪些代码块,所以我只是给出了整个项目的链接。

我真的被困在这里,任何帮助都会受到欢迎。

提前致谢。

4

3 回答 3

1

您应该使用{% csrf_token %}标签或@csrf_protect在视图中

于 2011-01-30T12:16:18.703 回答
1

尝试将 csrf 令牌添加到线程注释在内部传递但没有结果的字典中;

csrf_token是一个模板标签——它不应该作为参数传递给某个地方。

我看了看,threadedcomments它是基于contrib.comments没有 html 渲染的,所以你可以csrf_token在你的模板中插入。

显示表单代码的模板代码是什么样的?

如果您已CsrfViewMiddleware启用并且正在RequestContext视图中使用,则只需{% csrf_token %}<form></form>标签内添加即可。

至于获取用户名
ThreadedCommentComment具有name属性的子类,或者您可以直接访问User...

{% for comment in comments % 
    {{ comment.user.first_name }}
    {{ comment.name }}
{% endfor %}
于 2011-01-30T19:57:20.820 回答
-1

您可以将表单放入其自己的模板中,并将{% include %}其放入您的页面模板中。从 Django 1.3 开始,{% include %}可以将上下文变量传递给包含的模板。这是我使用的,django.contrib.comments而不是模板标签:

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

{%csrf_token %}在这个包含的模板中工作,因为它使用您的主视图上下文。

于 2011-05-06T22:54:52.627 回答