Index: django/views/generic/date_based.py =================================================================== --- django/views/generic/date_based.py (revision 3354) +++ django/views/generic/date_based.py (working copy) @@ -1,11 +1,12 @@ from django.template import loader, RequestContext +from django.contrib.auth.views import redirect_to_login from django.core.exceptions import ObjectDoesNotExist from django.core.xheaders import populate_xheaders from django.http import Http404, HttpResponse import datetime, time def archive_index(request, queryset, date_field, num_latest=15, - template_name=None, template_loader=loader, + template_name=None, template_loader=loader, login_required=False, extra_context=None, allow_empty=False, context_processors=None, mimetype=None): """ @@ -19,6 +20,9 @@ Latest N (defaults to 15) objects by date """ if extra_context is None: extra_context = {} + if login_required and request.user.is_anonymous(): + return redirect_to_login(request) + model = queryset.model queryset = queryset.filter(**{'%s__lte' % date_field: datetime.datetime.now()}) date_list = queryset.dates(date_field, 'year')[::-1] @@ -46,8 +50,8 @@ def archive_year(request, year, queryset, date_field, template_name=None, template_loader=loader, extra_context=None, allow_empty=False, - context_processors=None, template_object_name='object', mimetype=None, - make_object_list=False): + login_required=False, context_processors=None, template_object_name='object', + mimetype=None, make_object_list=False): """ Generic yearly archive view. @@ -62,6 +66,9 @@ (Only available if make_object_list argument is True) """ if extra_context is None: extra_context = {} + if login_required and request.user.is_anonymous(): + return redirect_to_login(request) + model = queryset.model now = datetime.datetime.now() @@ -94,8 +101,8 @@ def archive_month(request, year, month, queryset, date_field, month_format='%b', template_name=None, template_loader=loader, - extra_context=None, allow_empty=False, context_processors=None, - template_object_name='object', mimetype=None): + extra_context=None, allow_empty=False, login_required=False, + context_processors=None, template_object_name='object', mimetype=None): """ Generic monthly archive view. @@ -111,6 +118,9 @@ list of objects published in the given month """ if extra_context is None: extra_context = {} + if login_required and request.user.is_anonymous(): + return redirect_to_login(request) + try: date = datetime.date(*time.strptime(year+month, '%Y'+month_format)[:3]) except ValueError: @@ -151,8 +161,8 @@ def archive_week(request, year, week, queryset, date_field, template_name=None, template_loader=loader, - extra_context=None, allow_empty=True, context_processors=None, - template_object_name='object', mimetype=None): + extra_context=None, allow_empty=True, login_required=False, + context_processors=None, template_object_name='object', mimetype=None): """ Generic weekly archive view. @@ -164,6 +174,9 @@ list of objects published in the given week """ if extra_context is None: extra_context = {} + if login_required and request.user.is_anonymous(): + return redirect_to_login(request) + try: date = datetime.date(*time.strptime(year+'-0-'+week, '%Y-%w-%U')[:3]) except ValueError: @@ -200,8 +213,8 @@ def archive_day(request, year, month, day, queryset, date_field, month_format='%b', day_format='%d', template_name=None, template_loader=loader, extra_context=None, allow_empty=False, - context_processors=None, template_object_name='object', - mimetype=None): + login_required=False, context_processors=None, + template_object_name='object', mimetype=None): """ Generic daily archive view. @@ -217,6 +230,9 @@ (datetime) the next day, or None if the current day is today """ if extra_context is None: extra_context = {} + if login_required and request.user.is_anonymous(): + return redirect_to_login(request) + try: date = datetime.date(*time.strptime(year+month+day, '%Y'+month_format+day_format)[:3]) except ValueError: @@ -267,7 +283,7 @@ month_format='%b', day_format='%d', object_id=None, slug=None, slug_field=None, template_name=None, template_name_field=None, template_loader=loader, extra_context=None, context_processors=None, - template_object_name='object', mimetype=None): + login_required=False, template_object_name='object', mimetype=None): """ Generic detail view from year/month/day/slug or year/month/day/id structure. @@ -277,6 +293,9 @@ the object to be detailed """ if extra_context is None: extra_context = {} + if login_required and request.user.is_anonymous(): + return redirect_to_login(request) + try: date = datetime.date(*time.strptime(year+month+day, '%Y'+month_format+day_format)[:3]) except ValueError: Index: django/views/generic/list_detail.py =================================================================== --- django/views/generic/list_detail.py (revision 3354) +++ django/views/generic/list_detail.py (working copy) @@ -1,13 +1,14 @@ from django.template import loader, RequestContext from django.http import Http404, HttpResponse +from django.contrib.auth.views import redirect_to_login from django.core.xheaders import populate_xheaders from django.core.paginator import ObjectPaginator, InvalidPage from django.core.exceptions import ObjectDoesNotExist def object_list(request, queryset, paginate_by=None, page=None, allow_empty=False, template_name=None, template_loader=loader, - extra_context=None, context_processors=None, template_object_name='object', - mimetype=None): + extra_context=None, login_required=False, context_processors=None, + template_object_name='object', mimetype=None): """ Generic list of objects. @@ -35,6 +36,9 @@ number of objects, total """ if extra_context is None: extra_context = {} + if login_required and request.user.is_anonymous(): + return redirect_to_login(request) + queryset = queryset._clone() if paginate_by: paginator = ObjectPaginator(queryset, paginate_by) @@ -80,7 +84,7 @@ def object_detail(request, queryset, object_id=None, slug=None, slug_field=None, template_name=None, template_name_field=None, - template_loader=loader, extra_context=None, + template_loader=loader, extra_context=None, login_required=False, context_processors=None, template_object_name='object', mimetype=None): """ @@ -92,6 +96,9 @@ the object """ if extra_context is None: extra_context = {} + if login_required and request.user.is_anonymous(): + return redirect_to_login(request) + model = queryset.model if object_id: queryset = queryset.filter(pk=object_id)