web-dev-qa-db-fra.com

Flacon: page actuelle dans la variable de demande

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> 
57
atp

Tant que vous avez importé request, request.path devrait contenir ces informations.

61
ranksrejoined

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>
46
Sosiska

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!

43
negus

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():
6
MoepMan

Essayer

<li {% if request.endpoint == "blueprintname.routename" %}class="active"{% endif %}>Home</li>

Celui-ci a fonctionné pour moi.

3
iChux

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"

0
Iaron