Flask: current page in request variable

前端 未结 6 877
悲&欢浪女
悲&欢浪女 2020-12-04 16:41

In a template, how do I get what page I\'m currently on? I\'d rather not pass a variable like page , especially when I know some request.xxx can pr

相关标签:
6条回答
  • 2020-12-04 16:48

    Try

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

    This one worked for me.

    0 讨论(0)
  • 2020-12-04 16:49

    To avoid using hard-coded URLs you can use the url_for function like this:

    {% 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 %}
    

    In this case index, foo, bar and baz would be function names, used like this in your python code:

    @app.route('/')
    def index():
    
    0 讨论(0)
  • 2020-12-04 16:59

    Using request.path doesn't seem to be a proper approach since you'll have to update the paths in case of changing URL rules or deploying your site under a subfolder.

    Use request.url_rule.endpoint instead, it contains actual endpoint name independent of actual path:

    (Pdb) request.url_rule.endpoint
    'myblueprint.client_pipeline'
    

    In a template:

    <li {% if request.url_rule.endpoint == "myblueprint.client_pipeline" %}class="active"{% endif %}>Home</li>
    

    Good luck!

    0 讨论(0)
  • 2020-12-04 17:01

    As long as you've imported request, request.path should contain this information.

    0 讨论(0)
  • 2020-12-04 17:06

    First import request from flask in your application. Then you can use it without passing to template:

    <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>
    
    0 讨论(0)
  • 2020-12-04 17:08

    You can also use .split if your url has more stuff in it.

    Example:

    /product
    /product/add
    /product/32432/edit
    /product/32432/view

    {{ request.path.split('/')[1] }}

    This will return only "product"

    0 讨论(0)
提交回复
热议问题