Exemplo n.º 1
0
    def get_template_names(self):
        """
        Return a list of template names to be used for the request. Must return
        a list. May not be called if get_template is overridden.
        """
        try:
            names = super(SingleDocumentTemplateResponseMixin,
                          self).get_template_names()
        except ImproperlyConfigured:
            # If template_name isn't specified, it's not a problem --
            # we just start with an empty list.
            names = []

        # If self.template_name_field is set, grab the value of the field
        # of that name from the object; this is the most specific template
        # name, if given.
        if self.object and self.template_name_field:
            name = getattr(self.object, self.template_name_field, None)
            if name:
                names.insert(0, name)

        # The least-specific option is the default <app>/<document>_detail.html;
        # only use this if the object in question is a document.
        if hasattr(self.object, '_meta'):
            opts = get_document_options(self.object)
            names.append("%s/%s%s.html" %
                         (opts.app_label, opts.object_name.lower(),
                          self.template_name_suffix))
        elif hasattr(self, 'document') and hasattr(self.document, '_meta'):
            opts = get_document_options(self.document)
            names.append("%s/%s%s.html" %
                         (opts.app_label, opts.object_name.lower(),
                          self.template_name_suffix))
        return names
Exemplo n.º 2
0
 def get_context_object_name(self, object_list):
     """
     Get the name of the item to be used in the context.
     """
     if self.context_object_name:
         return self.context_object_name
     elif hasattr(object_list, '_document'):
         opts = get_document_options(object_list._document)
         return smart_str('%s_list' % opts.object_name.lower())
     else:
         return None
Exemplo n.º 3
0
 def get_context_object_name(self, object_list):
     """
     Get the name of the item to be used in the context.
     """
     if self.context_object_name:
         return self.context_object_name
     elif hasattr(object_list, '_document'):
         opts = get_document_options(object_list._document)
         return smart_str('%s_list' % opts.object_name.lower())
     else:
         return None
Exemplo n.º 4
0
 def get_context_object_name(self, obj):
     """
     Get the name to use for the object.
     """
     if self.context_object_name:
         return self.context_object_name
     elif hasattr(obj, '_meta'):
         opts = get_document_options(obj)
         return smart_str(opts.object_name.lower())
     else:
         return None
Exemplo n.º 5
0
 def get_context_object_name(self, obj):
     """
     Get the name to use for the object.
     """
     if self.context_object_name:
         return self.context_object_name
     elif hasattr(obj, '_meta'):
         opts = get_document_options(obj)
         return smart_str(opts.object_name.lower())
     else:
         return None
Exemplo n.º 6
0
    def get_template_names(self):
        """
        Return a list of template names to be used for the request. Must return
        a list. May not be called if get_template is overridden.
        """
        try:
            names = super(SingleDocumentTemplateResponseMixin, self).get_template_names()
        except ImproperlyConfigured:
            # If template_name isn't specified, it's not a problem --
            # we just start with an empty list.
            names = []

        # If self.template_name_field is set, grab the value of the field
        # of that name from the object; this is the most specific template
        # name, if given.
        if self.object and self.template_name_field:
            name = getattr(self.object, self.template_name_field, None)
            if name:
                names.insert(0, name)

        # The least-specific option is the default <app>/<document>_detail.html;
        # only use this if the object in question is a document.
        if hasattr(self.object, '_meta'):
            opts = get_document_options(self.object)
            names.append("%s/%s%s.html" % (
                opts.app_label,
                opts.object_name.lower(),
                self.template_name_suffix
            ))
        elif hasattr(self, 'document') and hasattr(self.document, '_meta'):
            opts = get_document_options(self.document)
            names.append("%s/%s%s.html" % (
                opts.app_label,
                opts.object_name.lower(),
                self.template_name_suffix
            ))
        return names
Exemplo n.º 7
0
    def get_template_names(self):
        """
        Return a list of template names to be used for the request. Must return
        a list. May not be called if get_template is overridden.
        """
        try:
            names = super(MultipleDocumentsTemplateResponseMixin, self).get_template_names()
        except ImproperlyConfigured:
            # If template_name isn't specified, it's not a problem --
            # we just start with an empty list.
            names = []

        # If the list is a queryset, we'll invent a template name based on the
        # app and document name. This name gets put at the end of the template
        # name list so that user-supplied names override the automatically-
        # generated ones.
        if hasattr(self.object_list, '_document'):
            opts = get_document_options(self.object_list._document)
            names.append("%s/%s%s.html" % (opts.app_label, opts.object_name.lower(), self.template_name_suffix))

        return names
Exemplo n.º 8
0
    def get_object(self, queryset=None):
        """
        Returns the object the view is displaying.

        By default this requires `self.queryset` and a `pk` or `slug` argument
        in the URLconf, but subclasses can override this to return any object.
        """
        # Use a custom queryset if provided; this is required for subclasses
        # like DateDetailView
        if queryset is None:
            queryset = self.get_queryset()

        # Next, try looking up by primary key.
        pk = self.kwargs.get(self.pk_url_kwarg, None)
        slug = self.kwargs.get(self.slug_url_kwarg, None)
        if pk is not None:
            queryset = queryset.filter(pk=pk)

        # Next, try looking up by slug.
        elif slug is not None:
            slug_field = self.get_slug_field()
            queryset = queryset.filter(**{slug_field: slug})

        # If none of those are defined, it's an error.
        else:
            raise AttributeError(u"Generic detail view %s must be called with "
                                 u"either an object pk or a slug." %
                                 self.__class__.__name__)

        try:
            obj = queryset.get()
        except DoesNotExist:
            opts = get_document_options(queryset._document)
            raise Http404(
                _(u"No %(verbose_name)s found matching the query") %
                {'verbose_name': opts.verbose_name})
        return obj
Exemplo n.º 9
0
    def get_template_names(self):
        """
        Return a list of template names to be used for the request. Must return
        a list. May not be called if get_template is overridden.
        """
        try:
            names = super(MultipleDocumentsTemplateResponseMixin,
                          self).get_template_names()
        except ImproperlyConfigured:
            # If template_name isn't specified, it's not a problem --
            # we just start with an empty list.
            names = []

        # If the list is a queryset, we'll invent a template name based on the
        # app and document name. This name gets put at the end of the template
        # name list so that user-supplied names override the automatically-
        # generated ones.
        if hasattr(self.object_list, '_document'):
            opts = get_document_options(self.object_list._document)
            names.append("%s/%s%s.html" %
                         (opts.app_label, opts.object_name.lower(),
                          self.template_name_suffix))

        return names
Exemplo n.º 10
0
    def get_object(self, queryset=None):
        """
        Returns the object the view is displaying.

        By default this requires `self.queryset` and a `pk` or `slug` argument
        in the URLconf, but subclasses can override this to return any object.
        """
        # Use a custom queryset if provided; this is required for subclasses
        # like DateDetailView
        if queryset is None:
            queryset = self.get_queryset()

        # Next, try looking up by primary key.
        pk = self.kwargs.get(self.pk_url_kwarg, None)
        slug = self.kwargs.get(self.slug_url_kwarg, None)
        if pk is not None:
            queryset = queryset.filter(pk=pk)

        # Next, try looking up by slug.
        elif slug is not None:
            slug_field = self.get_slug_field()
            queryset = queryset.filter(**{slug_field: slug})

        # If none of those are defined, it's an error.
        else:
            raise AttributeError("Generic detail view %s must be called with "
                                 "either an object pk or a slug."
                                 % self.__class__.__name__)

        try:
            obj = queryset.get()
        except DoesNotExist:
            opts = get_document_options(queryset._document)
            raise Http404(_("No %(verbose_name)s found matching the query") %
                          {'verbose_name': opts.verbose_name})
        return obj