Dans un modèle, comment obtenir la page sur laquelle je suis actuellement? Je préfère ne pas passer une variable comme page
, surtout quand je connais request.xxx
peut me fournir les informations.
<li {% if page=="home" %}class="active"{% endif %}>
<a href="/">Home</a>
</li>
<li {% if page=="about" %}class="active"{% endif %}>
<a href="/about">About</a>
</li>
Tant que vous avez importé request
, request.path
devrait contenir ces informations.
Première demande d'importation depuis flask dans votre application. Ensuite, vous pouvez l'utiliser sans passer au modèle:
<li {%- if request.path == "/home" %} class="active"{% endif %}>
<a href="/">Home</a>
</li>
<li {%- if request.path=="/about" %} class="active"{% endif %}>
<a href="/about">About</a>
</li>
L'utilisation de request.path ne semble pas être une approche appropriée, car vous devrez mettre à jour les chemins en cas de modification des règles d'URL ou de déploiement de votre site sous un sous-dossier.
Utilisez plutôt request.url_rule.endpoint, il contient le nom du point de terminaison réel indépendamment du chemin réel:
(Pdb) request.url_rule.endpoint
'myblueprint.client_pipeline'
Dans un modèle:
<li {% if request.url_rule.endpoint == "myblueprint.client_pipeline" %}class="active"{% endif %}>Home</li>
Bonne chance!
Pour éviter d'utiliser des URL codées en dur, vous pouvez utiliser le url_for
fonctionne comme ceci:
{% for ni in ['index', 'foo', 'bar', 'baz'] %}
<li {%- if request.path == url_for(ni) %} class="active"{% endif %}><a href="{{ url_for(ni) }}">{{ ni | capitalize }}</a></li>
{% endfor %}
Dans ce cas, index, foo, bar et baz seraient des noms de fonction, utilisés comme ceci dans votre code python:
@app.route('/')
def index():
Essayer
<li {% if request.endpoint == "blueprintname.routename" %}class="active"{% endif %}>Home</li>
Celui-ci a fonctionné pour moi.
Vous pouvez également utiliser . Split si votre URL contient plus de choses.
Exemple:
/produit
/produit/ajouter
/produit/32432/modifier
/produit/32432/voir
{{request.path.split ('/') [1]}}
Cela ne retournera que "produit"