Question

Mon application est en cours d'exécution sur App Engine et est implémenté en utilisant Werkzeug et Jinja2 . Je voudrais avoir quelque chose fonctionnellement équivalent de processeur propre contexte de Django: une appelable qui prend une demande et ajoute quelque chose au contexte du modèle. J'ai déjà un « processeurs de contexte » qui ajoutent quelque chose au contexte du modèle, mais comment puis-je obtenir cette demande partiel? Je mis en œuvre des processeurs de contexte comme appelables qui reviennent juste un dictionnaire qui est utilisé plus tard pour mettre à jour le contexte.

Par exemple, je voudrais ajouter quelque chose qui est contenu dans request.environ.

Autres conseils

Eh bien, en utilisant ce que Ali a écrit Je suis venu la solution qui est spécifique à App Engine (en raison de sa cache d'importation). Malheureusement, le code d'Ali ne fonctionne pas avec App Engine, car le code qui définit GLOBALS Jinja sont importés qu'une seule fois (ce qui globals efficacement statiques).

Je devais écrire ma propre fonction render() et mettre à jour le contexte là. Pour être complet, voici le code que je suis venu à:

def render(template, **kwargs):
    response_code = kwargs.pop('response_code', 200)
    mimetype = kwargs.pop('mimetype', 'text/html')
    for item in getattr(settings, 'CONTEXT_PROCESSORS', []):
        try:
            processor = import_string(item)
            kwargs.update(processor(local.request))
        except (ImportError, AttributeError), e:
            logging.error(e)
    return Response(jinja_env.get_template(template).render(**kwargs),
        status=response_code, mimetype=mimetype)

Ceci est spécifique App Engine. Dans d'autres environnements code d'Ali fonctionne comme prévu (et c'est la raison pour laquelle je retagging ma question).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top