В чем разница между добавлением словаря как части RequestContext или части render_to_response в Django? - PullRequest
2 голосов
/ 22 марта 2012

В настоящее время, поскольку я хочу получить доступ к информации user во всех моих шаблонах, я всегда использую context_instance = RequestContext( request ) во всех своих представлениях.Мне также нравится RequestContext, потому что он автоматически обрабатывает csrf.

Прямо сейчас я обычно просто помещаю все значения моего словаря в RequestContext, чтобы отобразить так

request_context = RequestContext( request, {
    'order'          : order,
    'order_comments' : order_comments,
    'comment_form'   : comment_form,
} )

return render_to_response( 'doors/orders/detail.html', context_instance = request_context )

Как этоотличается от этого?

context = {
    'order'          : order,
    'order_comments' : order_comments,
    'comment_form'   : comment_form,
}

return render_to_response( 'doors/orders/detail.html', context, context_instance = RequestContext( request ) )

Если на самом деле нет программных отличий, то какой метод является лучшим или предпочтительным?

1 Ответ

6 голосов
/ 22 марта 2012

Разницы, в основном, нет.

Во втором примере аргумент context обновляет context_instance, но сам по себе он пуст, поэтому между этими примерами нет никакой разницы.

Вотsource ...

if not context_instance:
    return t.render(Context(dictionary))
# Add the dictionary to the context stack, ensuring it gets removed again
# to keep the context_instance in the same state it started in.
context_instance.update(dictionary)

Для меня предпочтительнее использовать ярлык render из 1.3+ вместо ярлыка render_to_response, поскольку для большей части рендеринга шаблонов я использую RequestContext.

from django.shortcuts import render_to_response, render

render(request, 'mytemplate.html', {'foo': 'bar'}) # automatically uses RequestContext
# vs 
render_to_response('mytemplate.html', {'foo': 'bar'}, context_instance=RequestContext(request))
...