dict()和add_csrf()是一样的吗?

时间:2013-02-18 11:47:15

标签: python django

我有两个类似的功能,我想知道dictadd_csrf是否相同?

它们是否都返回与模板中的变量相关的值?

def main(request):
    """Main listing."""
    forums = Forum.objects.all()
    return render_to_response("forum/list.html", dict(forums=forums, user=request.user))

def forum(request, pk):
    """Listing of threads in a forum."""
    threads = Thread.objects.filter(forum=pk).order_by("-created")
    threads = mk_paginator(request, threads, 20)
    return render_to_response("forum/forum.html", add_csrf(request, threads=threads, pk=pk))

2 个答案:

答案 0 :(得分:3)

add_csrf()是一个返回dict的函数。它用于添加csrf标记以及请求参数。

from django.core.context_processors import csrf

def add_csrf(request, **kwargs):
    """
        Add CSRF to dictionary.
    """
    d = dict(user=request.user, **kwargs)
    d.update(csrf(request))
    return d

其中dict()是用于创建字典的python内置函数

答案 1 :(得分:0)

有点。

dict()是一个内置的Python函数(或者可能是一个类 - 我不太注意我的Python细节),它接受命名参数,并返回一个Python字典。

由于render_to_response需要一个字典(或者更确切地说是一个Django上下文对象,但字典会这样做)作为它的第二个参数,你可以在那里使用dict()。您可以同样使用字典文字:

render_to_response("forum/list.html", {"forums":forums, "user":request.user})

can't find any reference to add_csrf in the Django documentation,所以我想这是一个帮助函数,有人写了做CSRF相关的东西。 (@CrazyShezy notes它将CSRF令牌添加到传递给模板的上下文中。)

因为它的结果作为render_to_response的第二个参数传递,它也必须返回一个字典(或Django上下文对象)。