Django

Code

Ticket #1229: date_based.diff

File date_based.diff, 2.4 kB (added by nick@efford.net, 3 years ago)

Fixes date-based generic views to universally support allow_empty

  • date_based.py

    old new  
    4848 
    4949def archive_year(request, year, model, date_field, 
    5050        template_name=None, template_loader=loader, extra_lookup_kwargs={}, 
    51         extra_context={}, context_processors=None): 
     51        extra_context={}, allow_empty=False, context_processors=None): 
    5252    """ 
    5353    Generic yearly archive view. 
    5454 
     
    6666        lookup_kwargs['%s__lte' % date_field] = now 
    6767    lookup_kwargs.update(extra_lookup_kwargs) 
    6868    date_list = getattr(model._default_manager, "get_%s_list" % date_field)('month', **lookup_kwargs) 
    69     if not date_list
    70         raise Http404 
     69    if not date_list and not allow_empty
     70        raise Http404, "No %s available" % model._meta.verbose_name 
    7171    if not template_name: 
    7272        template_name = "%s/%s_archive_year" % (model._meta.app_label, model._meta.object_name.lower()) 
    7373    t = template_loader.get_template(template_name) 
     
    8484 
    8585def archive_month(request, year, month, model, date_field, 
    8686        month_format='%b', template_name=None, template_loader=loader, 
    87         extra_lookup_kwargs={}, extra_context={}, context_processors=None): 
     87        extra_lookup_kwargs={}, extra_context={}, allow_empty=False, 
     88        context_processors=None): 
    8889    """ 
    8990    Generic monthly archive view. 
    9091 
     
    113114        lookup_kwargs['%s__lte' % date_field] = now 
    114115    lookup_kwargs.update(extra_lookup_kwargs) 
    115116    object_list = model._default_manager.get_list(**lookup_kwargs) 
    116     if not object_list
    117         raise Http404 
     117    if not object_list and not allow_empty
     118        raise Http404, "No %s available" % model._meta.verbose_name 
    118119    if not template_name: 
    119120        template_name = "%s/%s_archive_month" % (model._meta.app_label, model._meta.object_name.lower()) 
    120121    t = template_loader.get_template(template_name) 
     
    162163    lookup_kwargs.update(extra_lookup_kwargs) 
    163164    object_list = model._default_manager.get_list(**lookup_kwargs) 
    164165    if not allow_empty and not object_list: 
    165         raise Http404 
     166        raise Http404, "No %s available" % model._meta.verbose_name 
    166167    if not template_name: 
    167168        template_name = "%s/%s_archive_day" % (model._meta.app_label, model._meta.object_name.lower()) 
    168169    t = template_loader.get_template(template_name)