Я читаю о просмотрах шаблонов через учебник, а некоторые из кода меня путают. Автор использовал этот образец кодаTemplate View - kwargs and ** kwargs
from django.utils.timezone import now
class AboutUsView(TemplateView):
template_name = 'about_us.html'
def get_context_data(self, **kwargs):
context = super(AboutUsView, self).get_context_data(**kwargs)
if now().weekday() < 5 and 8 < now().hour < 18:
context['open'] = True
else:
context['open'] = False
return context
что меня смутило синтаксически было это заявление
context = super(AboutUsView, self).get_context_data(**kwargs)
, если мы уже получаем **kwargs
, то почему мы передаем его в супер-функции с ** (двойной Начало). Я думаю, мы должны передать его как
context = super(AboutUsView, self).get_context_data(kwargs)
это contextMixin, который принимает этот вызов.
class ContextMixin(object):
"""
A default context mixin that passes the keyword arguments received by
get_context_data as the template context.
"""
def get_context_data(self, **kwargs):
if 'view' not in kwargs:
kwargs['view'] = self
return kwargs
Из того, что я прочитал, что использование **kwargs
в значительной степени означает, что kwargs в настоящее время словарь и должно быть преобразовано в именованное значение. Если это правильно, то каким образом kwargs может быть словарем, когда его параметр фактически равен ** kwargs. Надеюсь, мой вопрос имеет смысл. Пожалуйста, дайте мне знать, если вы хотите, чтобы я перефразировал это.
ОК, это определенно имеет смысл. Спасибо за очищение этого –
Кстати, как вы знаете, что kwargs в 'def get_context_data (self, ** kwargs):' фактически получает словарь? –
@JamesFranco см. Мое редактирование: большую часть времени это предназначено для получения неопределенных аргументов ключевого слова. – brianpck