2017-04-20 14 views
3

テンプレートにいくつかのビューを渡す必要があります。コンテキストは、一部のユーザーの情報を使用してBDから取得されたので、私は特定のContextMixinクラスを実装しました:Django ContextMixin 'super'オブジェクトに 'get_context_data'属性がありません

class CampaignContextMixin(ContextMixin): 
""" 
This mixin returns context with info related to user's campaign. 
It can be used in any view that needs campaign-related info to a template. 
""" 
def get_campaigns(self): 
    # Get the first campaign related to user, can be more in the future 
    return self.request.user.campaign_set.all() 

# Method Overwritten to pass campaign data to template context 
def get_context_data(self, **kwargs): 
    context = super(CampaignContextMixin).get_context_data(**kwargs) 
    campaign = self.get_campaigns()[0] 
    context['campaign_name'] = campaign.name 
    context['campaign_start_date'] = campaign.start_date 
    context['campaign_end_date'] = campaign.end_date 
    context['org_name'] = self.request.user.organization.name 
    context['campaign_image'] = campaign.image.url 
    context['campaign_details'] = campaign.details 
    return context 

は、その後、私は私の意見でそれを使用しようとしているが、私はエラーを取得しています:

'super' object has no attribute 'get_context_data'

class VoucherExchangeView(CampaignContextMixin, TemplateView): 
""" 
This view Handles the exchange of vouchers. 
""" 
template_name = "voucher_exchange.html" 

def get_context_data(self, **kwargs): 
    ctx = super(VoucherExchangeView).get_context_data(**kwargs) 
    # add specific stuff if needed 
    return ctx 

は私があるため、継承のエラーの原因となっているかどうかわからない」、またはTemplateViewはContextMixinからも継承するため。私の目標は、キャンペーン情報をコンテキストに追加するコードを再利用することです。

おかげ

答えて

5

あなたは

super(CampaignContextMixin, self).get_context_data(**kwargs) 
#super().get_context_data(**kwargs) --> python3 
+0

感謝をもしかして!それは問題だった、私は自己を渡すことを忘れてしまった! –