2
votes

Comment les vues basées sur les classes déterminent quel fichier modèle sera appelé?

voici le code:

template_name = 'book_list.html'

et les vues

# views.py

class BookListView(generic.ListView):
    model = Book

Book est une classe de models.py , cette vue utilisera le modèle book_list.html . Ma question est:

Pourquoi sait-il quels modèles seront appelés? Je ne lui ai même pas donné le nom_modèle . juste comme ça

# urls.py

urlpatterns = [
    path("books/", views.BookListView.as_view(), name="books"),
]


0 commentaires

3 Réponses :


0
votes

Dans ListView , lorsque vous ne spécifiez pas explicitement template_name , il prend le nom du modèle en minuscules et ajoute _list à la fin. Comme votre modèle est Book et il recherchera book_list.html

Si vous voulez que votre propre suffixe soit appliqué au lieu de _list , vous devez le spécifier comme ceci:

template_name_suffix = '_myown '

En outre, ce site Web est très utile pour voir toutes les méthodes et l'utilisation des vues basées sur les classes.


0 commentaires


0
votes

Generic Listview cherchera le nom du modèle et le suffixe avec '_list'. Jetez un œil à la classe ci-dessous qui fait cela dans Django

class MultipleObjectTemplateResponseMixin(TemplateResponseMixin):
    """
    Mixin for responding with a template and list of objects.
    """
    template_name_suffix = '_list'

    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, 'model'):
            opts = self.object_list.model._meta
            names.append("%s/%s%s.html" % (opts.app_label, opts.model_name, self.template_name_suffix))

        return names


0 commentaires