在django,python中context_dict和context之间有什么区别?

时间:2014-12-16 17:27:05

标签: python django

我总是在我的方法中使用上下文,直到我看到这个观点:

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

还是这个完全一样?

谢谢你们!

3 个答案:

答案 0 :(得分:2)

  • context_dict是一个简单的字典

  • context是一个实例或RequestContext

<{1}} render_to_response()内的

是(临时)添加到context_dict实例

代码(在这种情况下)可以更清楚地写成(恕我直言):

context

如果django&gt; = 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(&#39; rango / index.html&#39;,context_dict)

对于模板视图更有意义,您从请求中读取并返回带有(结果)上下文的响应。

注意:如果从标题(请求)

需要其他信息,这可能不起作用