0

我尝试使用基于类的视图渲染多个对象,但出现错误。

这是我的代码:

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
4

3 回答 3

2

我总是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类要求您定义 View 返回的模型(即YourModel.objects.all())。或者要返回的特定查询集(例如YourModel.objects.filter(your_field=some_variable))。

于 2013-03-03T17:33:27.217 回答
2

model因为这是一个 ListView,所以您需要用 a或告诉它您要列出的内容queryset。在这种情况下,您不想使用 ListView,因为您正在覆盖get_context_data,因此您可能应该使用 TemplateView 或类似的东西。

于 2013-03-03T17:39:48.403 回答
1

尝试这样的事情:

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 或信封列表而不是 all_envelopes,你应该很高兴。

PS http://ccbv.co.uk/关于 CBV 的良好知识来源。

于 2013-03-03T17:46:39.570 回答