Django Personnalisation des vues génériques


Exemple

L'exemple ci-dessus ne fonctionne que si vos tâches sont des tâches entièrement standard. Vous n’ajoutez pas de contexte supplémentaire ici, par exemple.

Faisons un exemple plus réaliste. Supposons que nous voulions ajouter un titre de page au modèle. Dans la vue fonctionnelle, cela fonctionnerait comme cela - avec une seule ligne supplémentaire:

def create_object(request):
    page_title = 'My Page Title'

    # ...

    return render_to_response('template.html', locals())

Ceci est plus difficile (ou: contre-intuitif) à réaliser avec des vues génériques. Comme ils sont basés sur des classes, vous devez remplacer une ou plusieurs méthodes de la classe pour obtenir le résultat souhaité. Dans notre exemple, nous devons remplacer la méthode get_context_data de la classe comme suit :

class CreateObject(CreateView):
    model = SampleObject
    form_class = SampleObjectForm
    success_url = 'url_to_redirect_to'

    def get_context_data(self, **kwargs):
        
        # Call class's get_context_data method to retrieve context
        context = super().get_context_data(**kwargs) 
        
        context['page_title'] = 'My page title'
        return context

Ici, nous avons besoin de coder quatre lignes supplémentaires au lieu d'une seule - du moins pour la première variable de contexte supplémentaire à ajouter.