0

我有两个类似的功能,我想知道是否dict相同add_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))
4

2 回答 2

3

add_csrf()是一个返回字典的函数。它用于添加 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内置函数在哪里

于 2013-02-18T11:55:01.120 回答
0

有点儿。

dict()是一个内置的 Python 函数(或者可能是一个类——我对我的 Python 细节不是很了解),它接受命名参数,并返回一个 Python 字典。

正如render_to_response预期的那样,将字典(或者更确切地说是 Django 上下文对象,但字典可以)作为它的第二个参数,您可以dict()在那里使用。您同样可以使用字典文字:

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

在 Django 文档中找不到任何参考add_csrf,所以我想它是某人编写的用于执行 CSRF 相关内容的辅助函数。(@CrazyShezy 指出它会将 CSRF 令牌添加到传递给模板的上下文中。)

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

于 2013-02-18T11:56:22.707 回答