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(MultipleDocumentTemplateResponseMixin, 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)) names.append("{}s.html".format(self.template_name_suffix)) return names
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
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
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
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 )) # Include Base document as well if hasattr(self, 'document') and hasattr(self.document, '_meta'): opts = get_document_options(self.document) name = "%s/%s%s.html" % ( opts.app_label, opts.object_name.lower(), self.template_name_suffix ) if name not in names: names.append(name) return names
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'): doc_cls = self.object.__class__ elif hasattr(self, 'document') and hasattr(self.document, '_meta'): doc_cls = self.document else: if names: return names raise ImproperlyConfigured("No object or document class associated with this view") # Get any superclasses if needed doc_classes = [doc_cls] for doc_cls in doc_classes: opts = get_document_options(doc_cls) name = "%s/%s%s.html" % ( opts.app_label, opts.object_name.lower(), self.template_name_suffix ) if name not in names: names.append(name) # Basic template form: templates/_types.html names.append("{}s.html".format(self.template_name_suffix)) return names
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'): doc_cls = self.object.__class__ elif hasattr(self, 'document') and hasattr(self.document, '_meta'): doc_cls = self.document else: if names: return names raise ImproperlyConfigured( "No object or document class associated with this view") # Get any superclasses if needed doc_classes = [doc_cls] for doc_cls in doc_classes: opts = get_document_options(doc_cls) name = "%s/%s%s.html" % (opts.app_label, opts.object_name.lower(), self.template_name_suffix) if name not in names: names.append(name) # Basic template form: templates/_types.html names.append("{}s.html".format(self.template_name_suffix)) return names
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 render_to_response is overridden. """ try: names = super(MultipleObjectTemplateResponseMixin, 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 model 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.model_name, self.template_name_suffix)) return names
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
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