diff --git a/django/views/generic/date_based.py b/django/views/generic/date_based.py index a4746f0574..c02e545ed5 100644 --- a/django/views/generic/date_based.py +++ b/django/views/generic/date_based.py @@ -51,7 +51,7 @@ def archive_index(request, app_label, module_name, date_field, num_latest=15, def archive_year(request, year, app_label, module_name, date_field, template_name=None, template_loader=loader, extra_lookup_kwargs={}, - extra_context={}, context_processors=None): + extra_context={}, allow_empty=False, context_processors=None): """ Generic yearly archive view. @@ -70,7 +70,7 @@ def archive_year(request, year, app_label, module_name, date_field, lookup_kwargs['%s__lte' % date_field] = now lookup_kwargs.update(extra_lookup_kwargs) date_list = getattr(mod, "get_%s_list" % date_field)('month', **lookup_kwargs) - if not date_list: + if not date_list and not allow_empty: raise Http404 if not template_name: template_name = "%s/%s_archive_year" % (app_label, module_name) @@ -88,7 +88,8 @@ def archive_year(request, year, app_label, module_name, date_field, def archive_month(request, year, month, app_label, module_name, date_field, month_format='%b', template_name=None, template_loader=loader, - extra_lookup_kwargs={}, extra_context={}, context_processors=None): + extra_lookup_kwargs={}, extra_context={}, allow_empty=False, + context_processors=None): """ Generic monthly archive view. @@ -122,7 +123,7 @@ def archive_month(request, year, month, app_label, module_name, date_field, lookup_kwargs['%s__lte' % date_field] = now lookup_kwargs.update(extra_lookup_kwargs) object_list = mod.get_list(**lookup_kwargs) - if not object_list: + if not object_list and not allow_empty: raise Http404 if not template_name: template_name = "%s/%s_archive_month" % (app_label, module_name) diff --git a/docs/generic_views.txt b/docs/generic_views.txt index f9544e12b2..cd27027f2e 100644 --- a/docs/generic_views.txt +++ b/docs/generic_views.txt @@ -168,6 +168,9 @@ The date-based generic functions are: Yearly archive. Requires that the ``year`` argument be present in the URL pattern. + **New in Django development version:** Takes an optional ``allow_empty`` + parameter, as ``archive_index``. + Uses the template ``app_label/module_name_archive_year`` by default. Has the following template context: @@ -187,6 +190,9 @@ The date-based generic functions are: default, which is a three-letter month abbreviation. To change it to use numbers, use ``"%m"``. + **New in Django development version:** Takes an optional ``allow_empty`` + parameter, as ``archive_index``. + Uses the template ``app_label/module_name_archive_month`` by default. Has the following template context: