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

これはListViewであるため、リストする内容をamodelまたは。で指定する必要がありますqueryset。この場合、オーバーライドしているため、ListViewを使用したくないので、get_context_dataおそらくTemplateViewまたは同様のものを使用する必要があります。

于 2013-03-03T17:39:48.403 に答える
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 に答える
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

クエリセットを持つモデルは必要ありませんが、定義することをお勧めします。テンプレートでは、all_envelopes の代わりに object_list または Envelope_list を使用してください。

PS http://ccbv.co.uk/ CBV に関する優れた情報源。

于 2013-03-03T17:46:39.570 に答える