2016-09-05 1 views
1

J'utilise flacon-panure add-on pour le serveur web flacon de python, mais je pense que cela est question plus générale du décorateur python,Modifier le paramètre de décorateur intérieur fonction

@app.route('/dashboard') 
@register_breadcrumb(app, '.', parameter) 
def render_dashboard_page(): 
... 

est-il possible de régler « paramètre "à partir de la fonction" render_dashboard_page "? J'ai besoin d'un paramètre à choisir en fonction du drapeau "Accept-language" de la requête, que je ne peux déterminer qu'après le lancement de la méthode. Par ailleurs, la 3ème entrée de "@register_breadcrumb" est le titre de l'élément de fil d'Ariane et je veux qu'il soit localisé en fonction du drapeau "Accept-language".

plus d'informations sur l'add-on: http://flask-breadcrumbs.readthedocs.io/en/latest/

Merci :)

Répondre

1

Il est impossible de passer des arguments au décorateur d'une fonction à l'intérieur de la fonction, comme le décorateur exécute avant que la fonction est définie. Un guide sur le fonctionnement des décorateurs peut être trouvé here et here - essentiellement, le décorateur est une fonction qui est passée la fonction ci-dessous, puis retourne une fonction qui devrait être insérée dans l'espace de noms.

plus facile de donner un exemple:

>>> def add_one(fn): 
...  print("add_one called") 
...  def wrap(n): 
...   print("wrap called") 
...   return fn(n) + 1 
...  return wrap 
>>> @add_one 
... def times_by_two(n): 
...  print("times_by_two called") 
...  return n * 2 
add_one called 
>>> times_by_two(21) 
wrap called 
times_by_two called 
43 

Je ne suis pas tout à fait sûr comment ce plugin fonctionne Flask, mais vous pourriez être en mesure d'utiliser la fonction variable rules pour faire ce que vous voulez. Il semble que vous pouvez définir une fonction à appeler qui renvoie du texte et une URL pour le dernier composant du fil d'Ariane, et l'objet request est accessible depuis cette fonction; J'espère que cela suffit pour déterminer la langue de l'utilisateur.