Intégrer une bafouille sur les context_processors #9

Open
opened 2020-11-01 11:35:08 +01:00 by Fred · 0 comments
Owner
Title Date Slug Tags
Django et ses contexts processors 2016-10-25 django-context-processors django,"python, config, dev

De manière très grossière, les contexts processors permettent de définir du contenu accessible globalement dans l'application, par exemple pour définir un menu de navigation ou le titre du site. On parle donc d'éléments qui ne sont pas spécifiques au contexte (vue, fonction, ...) actuel, mais plutôt définis globalement par rapport à l'application.

Au niveau de la vue, on a pour habitude de passer un dictionnaire au template; celui-ci sera complété par un ensemble d'autres informations, définies dans les contexts processors.

Techniquement, il s'agit simplement de fonctions référencées au niveau de la configuration de l'application. Si on souhaite générer un menu global, il suffit dès lors de définir une fonction dans un module particulier:

# my_module/navigation.py

def main_menu(request):
    return { 'links': ['Accueil', 'Se restaurer', 'Informations pratiques' ] }

On peut dès lors y accéder dans le template de base:

<!-- templates/base.html -->
<!DOCTYPE HTML>
<html>
    {% for link in links %}
        <a href="#">{{ link }}</a>
    {% endfor %}
</html>

Pour éviter que ces variables ne soient écrasées par la construction de la vue, la transmission du dictionnaire vers la vue doit être construite en utilisant la fonction render(request, template, context), de la manière suivante. Evitez la fonction render_to_response:

def events(request):
    context = { 'events': events = Event.objects.all() }

    return render(request, 'events.html', context)

Depuis Django 1.10, la variable TEMPLATE_CONTEXT_PROCESSORS est dépréciée et doit être remplacée par l'option context_processors:

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': ['templates', ],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                '...',
            ],
        },
    },
]
--- Title: Django et ses contexts processors Date: 2016-10-25 Slug: django-context-processors Tags: django,"python, config, dev --- De manière très grossière, les *`contexts processors`* permettent de définir du contenu accessible globalement dans l'application, par exemple pour définir un menu de navigation ou le titre du site. On parle donc d'éléments qui ne sont pas spécifiques au contexte (vue, fonction, ...) actuel, mais plutôt définis globalement par rapport à l'application. Au niveau de la vue, on a pour habitude de passer un dictionnaire au template; celui-ci sera complété par un ensemble d'autres informations, définies dans les *contexts processors*. Techniquement, il s'agit simplement de fonctions référencées au niveau de la configuration de l'application. Si on souhaite générer un menu global, il suffit dès lors de définir une fonction dans un module particulier: ```python # my_module/navigation.py def main_menu(request): return { 'links': ['Accueil', 'Se restaurer', 'Informations pratiques' ] } ``` On peut dès lors y accéder dans le template de base: ```django <!-- templates/base.html --> <!DOCTYPE HTML> <html> {% for link in links %} <a href="#">{{ link }}</a> {% endfor %} </html> ``` Pour éviter que ces variables ne soient écrasées par la construction de la vue, la transmission du dictionnaire vers la vue doit être construite en utilisant la fonction `render(request, template, context)`, de la manière suivante. Evitez la fonction `render_to_response`: ```python def events(request): context = { 'events': events = Event.objects.all() } return render(request, 'events.html', context) ``` Depuis Django 1.10, la variable `TEMPLATE_CONTEXT_PROCESSORS` est dépréciée et doit être remplacée par l'option `context_processors`: ```python TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': ['templates', ], 'APP_DIRS': True, 'OPTIONS': { 'context_processors': [ '...', ], }, }, ] ```
Sign in to join this conversation.
No Milestone
No Assignees
1 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Dependencies

No dependencies set.

Reference: Fred/gwift-book#9
No description provided.