Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Django ContextMixin 'super' object has no attribute 'get_context_data'

I need to pass some context to templates in several views. Context is obtained from the BD using some user's info, so I've implemented a Specific ContextMixin class:

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

Then I'm trying to use it in my views, but I'm getting an error:

'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

I' not sure if is caused because inheritance error, or because TemplateView inherits also from ContextMixin. My goal is to reuse the code that adds the campaigns info to the context.

Thanks

like image 849
Martinez Mariano Avatar asked Apr 20 '17 16:04

Martinez Mariano


1 Answers

Did you mean

super(CampaignContextMixin, self).get_context_data(**kwargs)
#super().get_context_data(**kwargs) --> python3
like image 196
itzMEonTV Avatar answered Sep 20 '22 14:09

itzMEonTV