我总是在我的方法中使用上下文,直到我看到这个观点:
def index(request):
context = RequestContext(request)
top_category_list = Category.objects.order_by('-likes')[:5]
for category in top_category_list:
category.url = encode_url(category.name)
context_dict = {'categories': top_category_list}
cat_list = get_category_list()
context_dict['cat_list'] = cat_list
page_list = Page.objects.order_by('-views')[:5]
context_dict['pages'] = page_list
if request.session.get('last_visit'):
# The session has a value for the last visit
last_visit_time = request.session.get('last_visit')
visits = request.session.get('visits', 0)
if (datetime.now() - datetime.strptime(last_visit_time[:-7], "%Y-%m-%d %H:%M:%S")).days > 0:
request.session['visits'] = visits + 1
else:
# The get returns None, and the session does not have a value for the last visit.
request.session['last_visit'] = str(datetime.now())
request.session['visits'] = 1
# Render and return the rendered response back to the user.
return render_to_response('rango/index.html', context_dict, context)
在上面的函数中有context_dict和context?那是为什么?
也有区别: context_dict = {' categories':top_category_list} 和 context_dict [' categories'] = top_category_list
还是这个完全一样?
谢谢你们!
答案 0 :(得分:2)
context_dict
是一个简单的字典
context
是一个实例或RequestContext
render_to_response()
内的是(临时)添加到context_dict
实例
代码(在这种情况下)可以更清楚地写成(恕我直言):
context
如果django> = 1.3,您可以使用
更改最后两行def index(request):
top_category_list = Category.objects.order_by('-likes')[:5]
for category in top_category_list:
category.url = encode_url(category.name)
page_list = Page.objects.order_by('-views')[:5]
cat_list = get_category_list()
context_dict = {'categories': top_category_list,
'pages': page_list,
'cat_list': cat_list}
context = RequestContext(request, context_dict)
return render_to_response('rango/index.html', context=context)
关于你的其他问题
return render(request, 'rango/index.html', context_dict)
创建新词典
context_dict = {'categories': top_category_list}
将新条目分配(或添加)到现有词典
答案 1 :(得分:0)
这几乎完全相同,第一个是定义新字典并在其中放入新的键/值,而第二个是将新的键:值放入其中,因为已经定义了dic。
在现代django,你做
return render(request, 'index.html', context_dic)
render已经为你处理了RequestContext。这种方式可以节省一些混淆
答案 2 :(得分:0)
实际上在Django 1.11中,这个小小的改变似乎有效。
定义dict :(不需要上下文,只有dict) 然后更改该行以获取dict:
返回render_to_response(' rango / index.html',context_dict)
对于模板视图更有意义,您从请求中读取并返回带有(结果)上下文的响应。
注意:如果从标题(请求)
需要其他信息,这可能不起作用