Development #18064
avoir les variables générales disponibles dans tous les templates
0%
Description
Mon besoin immédiat c'est connaitre dans le rendu d'un template si on est dans le backoffice mais avoir de manière plus large un context processor avec get_publisher().get_substitution_variables() peut être utile à d'autres occasions.
Fichiers
Révisions associées
Historique
Mis à jour par Frédéric Péters il y a plus de 6 ans
- Fichier 0001-general-expose-publisher-variables-to-all-templates-.patch 0001-general-expose-publisher-variables-to-all-templates-.patch ajouté
- Statut changé de Nouveau à En cours
- Patch proposed changé de Non à Oui
Mis à jour par Thomas Noël il y a plus de 6 ans
On est vraiment sûr que ça va pas écraser des trucs ? Parce que dans les variables de substitution, y'a beaucoup de n'importe quoi, non ?
Mis à jour par Frédéric Péters il y a plus de 6 ans
Il ya site_name, site_theme, site_url, site_url_backoffice, site_lang, today, now, is_in_backoffice + ce qui est contenu dans le [variables] du site-options.cfg. Par rapport à ce que django fournit en standard il y a conflit sur "now".
Mais ce conflit existe déjà de toute façon pour le rendu des templates de page, qui reçoivent toutes les variables de substitution (pas seulement celles du publisher).
De greps sur la prod, "now" est utilisé façon "Le formulaire a été enregistré le [now]" ou "Votre demande a été réceptionnée le [now] par nos services" (pourrait prendre [form_receipt_data] [form_receipt_time]), pas trouvé de référence dans des workflows; si on voulait le retirer à mon avis on pourrait sans danger.
Mis à jour par Thomas Noël il y a plus de 6 ans
Voilà, c'est surtout parce que je ne suis pas fan de l'ajout des «variables». Et que ça demande, on le voit ici, de faire attention quand on va jouer des variables dans wcs.
Mais ce conflit existe déjà de toute façon pour le rendu des templates de page, qui reçoivent toutes les variables de substitution (pas seulement celles du publisher).
Je suis complétement passé à côté de ça. Je sais pas si c'est si gênant, mais j'ai quand même l'impression que les context processor doivent éviter de trop jouer au hasard dans le contexte. Est-il encore temps de revoir ça ? Genre, de ne pas poser tout le dictionnaire des substvars tel quel dans le contexte, mais plutôt de l'envoyer dans une variable « wcs_vars » ?
Mis à jour par Benjamin Dauvergne il y a plus de 6 ans
Et les ajouter via un préfixe, genre {'wcs': get_publisher().get_substitution_variables()}
ou {'publisher': get_publisher().get_substitution_variables()}
?
Mis à jour par Thomas Noël il y a plus de 6 ans
Benjamin Dauvergne a écrit :
Et les ajouter via un préfixe, genre
{'wcs': get_publisher().get_substitution_variables()}
ou{'publisher': get_publisher().get_substitution_variables()}
?
Ouaip pour ce ticket, mais je proposais de généraliser l'affaire, de ne pas poser les variables wcs à la racine du contexte. C'est aussi parce que dans qommon.template.get_decorate_vars on termine par un vars.update(locals())
qui ne me mets pas en confiance. Mais, oui, cette idée dépasse le cadre de ce ticket, et j'aurais dû réagir plus tôt en relisant mieux 01b280aa2 (et à relire, je suis reperdu, trop vacancier)
Déjà pour ce ticket, je serai plus à l'aise avec {'wcs': get_publisher().get_substitution_variables()}
Mis à jour par Frédéric Péters il y a plus de 6 ans
[...] C'est aussi parce que dans qommon.template.get_decorate_vars on termine par un vars.update(locals()) qui ne me mets pas en confiance. [...]
Cet appel à locals(), c'est septembre 2005; conservé au fil du temps à cause de ses défauts : on s'est trouvé à ne pas avoir de liste nette de ce qui a pu être utilisé dans des templates. En vrai, avec un peu d'attention, on doit pouvoir constituer cette liste, et ça me va bien d'avoir ce genre de nettoyage. Mais ailleurs.
Déjà pour ce ticket, je serai plus à l'aise avec {'wcs': get_publisher().get_substitution_variables()}
Mais ça fait perdre la compatibilité avec les templates rendus par les autres applications, où hobo met *_url (et toutes les autres variables qui peuvent y être définies) à la racine.
Du coup ici j'attendrais qu'on prenne le temps de discuter et sur le temps immédiat je limiterais à :
def publisher_context_processor(request): return {'publisher': get_publisher()}
(voire 'wcs_publisher' même si j'aime moins)
Mis à jour par Thomas Noël il y a plus de 6 ans
Comme ton besoin est "connaitre dans le rendu d'un template si on est dans le backoffice", c'est pas plutôt quelque chose comme wcs_request.is_in_backoffice dont tu as besoin ?
Mis à jour par Thomas Noël il y a plus de 6 ans
Perso j'aurai préféré un simple objet wcs_request
ou quixote_request
rendu par un context processor wcs.whatever.wcs_request
qui serait à côté de django.template.context_processors.request
Mais publisher
aussi ça peut aller (au passage je pense qu'on doit pouvoir renvoyer get_publisher
au lieu de get_publisher()
, Django est assez doué sur ces machins lazy)
Mis à jour par Frédéric Péters il y a plus de 6 ans
- Fichier 0001-misc-add-way-to-get-quixote-request-from-django-requ.patch 0001-misc-add-way-to-get-quixote-request-from-django-requ.patch ajouté
Avec la correction dans #18422, ici j'atteindrais mon objectif en fournissant simplement un attribut envoyant de la requête django vers la requête quixote (vu que django.core.context_processors.request est déjà chargé).
Mis à jour par Frédéric Péters il y a plus de 6 ans
- Statut changé de En cours à Résolu (à déployer)
commit f1d2f0753eff0ed21f9fe9ceeb131692f3c85edb Author: Frédéric Péters <fpeters@entrouvert.com> Date: Mon Sep 4 14:41:45 2017 +0200 misc: add way to get quixote request from django request (#18064)
Mis à jour par Frédéric Péters il y a plus de 5 ans
- Statut changé de Résolu (à déployer) à Solution déployée
misc: add way to get quixote request from django request (#18064)