def profile_list(request, public_profile_field=None, template_name='profiles/profile_list.html', **kwargs): """ A list of user profiles. If no profile model has been specified in the ``AUTH_PROFILE_MODULE`` setting, ``django.contrib.auth.models.SiteProfileNotAvailable`` will be raised. **Optional arguments:** ``public_profile_field`` The name of a ``BooleanField`` on the profile model; if the value of that field on a user's profile is ``False``, that profile will be excluded from the list. Use this feature to allow users to mark their profiles as not being publicly viewable. If this argument is not specified, it will be assumed that all users' profiles are publicly viewable. ``template_name`` The name of the template to use for displaying the profiles. If not specified, this will default to :template:`profiles/profile_list.html`. Additionally, all arguments accepted by the :view:`django.views.generic.list_detail.object_list` generic view will be accepted here, and applied in the same fashion, with one exception: ``queryset`` will always be the ``QuerySet`` of the model specified by the ``AUTH_PROFILE_MODULE`` setting, optionally filtered to remove non-publicly-viewable proiles. **Context:** Same as the :view:`django.views.generic.list_detail.object_list` generic view. **Template:** ``template_name`` keyword argument or :template:`profiles/profile_list.html`. """ profile_model = utils.get_profile_model() queryset = profile_model._default_manager.all() if public_profile_field is not None: queryset = queryset.filter(**{ public_profile_field: True }) kwargs['queryset'] = queryset return object_list(request, template_name=template_name, **kwargs)
def tagged_object_list(request, queryset_or_model=None, tag=None, related_tags=False, related_tag_counts=True, **kwargs): """ A thin wrapper around ``django.views.generic.list_detail.object_list`` which creates a ``QuerySet`` containing instances of the given queryset or model tagged with the given tag. In addition to the context variables set up by ``object_list``, a ``tag`` context variable will contain the ``Tag`` instance for the tag. If ``related_tags`` is ``True``, a ``related_tags`` context variable will contain tags related to the given tag for the given model. Additionally, if ``related_tag_counts`` is ``True``, each related tag will have a ``count`` attribute indicating the number of items which have it in addition to the given tag. """ if queryset_or_model is None: try: queryset_or_model = kwargs.pop('queryset_or_model') except KeyError: raise AttributeError(_('tagged_object_list must be called with a queryset or a model.')) if tag is None: try: tag = kwargs.pop('tag') except KeyError: raise AttributeError(_('tagged_object_list must be called with a tag.')) tag_instance = get_tag(tag) if tag_instance is None: raise Http404(_('No Tag found matching "%s".') % tag) queryset = TaggedItem.objects.get_by_model(queryset_or_model, tag_instance) if not kwargs.has_key('extra_context'): kwargs['extra_context'] = {} kwargs['extra_context']['tag'] = tag_instance if related_tags: kwargs['extra_context']['related_tags'] = \ Tag.objects.related_for_model(tag_instance, queryset_or_model, counts=related_tag_counts) return object_list(request, queryset, **kwargs)