我有两个类似的功能,我想知道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))
答案 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上下文对象)。