Как визуализировать несколько объектов с использованием представлений на основе классов
Я пытаюсь визуализировать несколько объектов, используя представления на основе классов, но получаю ошибку.
Вот мои коды:
class AssociatedList(WizardRequiredMixin, TemplateView):
template_name = "profile/associated_accounts.html"
def get_context_data(self, **kwargs):
context = super(AssociatedList, self).get_context_data(**context)
all_envelopes = Envelope.objects.filter(
user=request.user).exclude_unallocate()
free_limit = account_limit(request, 15, all_envelopes)
facebook = FacebookProfile.user_profiles(request.user)
google = GoogleProfile.user_profiles(request.user)
twitter = TwitterProfile.user_profiles(request.user)
context.update = ({
'facebook': facebook,
'google': google,
'twitter': twitter,
'free_limit': free_limit,
})
return context
Ошибка:
local variable 'context' referenced before assignment
3 ответа
Я всегда переопределен get_context_data
позвонив super
в начале функции и затем добавляя контекст -
def get_context_data(self, *args, **kwargs):
context = super(AssociatedList, self).get_context_data(*args, **kwargs)
all_envelopes = Envelope.objects.filter(
user=self.request.user).exclude_unallocate()
free_limit = account_limit(self.request, 15, all_envelopes),
facebook = FacebookProfile.user_profiles(self.request.user),
google = GoogleProfile.user_profiles(self.request.user),
twitter = TwitterProfile.user_profiles(self.request.user),
context.update({
'facebook': facebook,
'google': google,
'twitter': twitter,
'free_limit': free_limit,
})
return context
Это шаблон, используемый в документах здесь.
ОБНОВИТЬ
Ошибка, которую вы только что добавили, предполагает ошибку в вашем классе. Похоже, вам нужно определить либо queryset
атрибут или model
приписывать.
ListView
класс, от которого вы наследуете, требует, чтобы вы либо определили модель, которую возвращает представление (т.е. YourModel.objects.all()
). Или же конкретный набор запросов, который будет возвращен (например, YourModel.objects.filter(your_field=some_variable)
).
Поскольку это ListView, вы должны сообщить ему, что вы собираетесь перечислить с model
или же queryset
, Вы не хотите использовать ListView в этом случае, так как вы переопределяете get_context_data
так что вы, вероятно, должны использовать TemplateView или что-то подобное.
Попробуйте что-то вроде этого:
class AssociatedList(WizardRequiredMixin, ListView):
template_name = "profile/associated_accounts.html"
model = Envelope
def get_queryset(self):
return Envelope.objects.filter(user=self.request.user).exclude_unallocate()
def get_context_data(self, **kwargs):
context = super(AssociatedList, self).get_context_data(**kwargs)
context.update({
'facebook': FacebookProfile.user_profiles(self.request.user),
'google': GoogleProfile.user_profiles(self.request.user),
'twitter': TwitterProfile.user_profiles(self.request.user),
'free_limit': account_limit(self.request, 15, context['envelope_list']),
})
return context
Вам не нужна модель, имеющая набор запросов, но это хорошая практика для ее определения. В шаблоне используйте object_list или envelope_list вместо all_envelopes, и вы должны хорошо идти.
PS http://ccbv.co.uk/ хороший источник знаний о CBV.