IT박스

Flask : 요청 변수의 현재 페이지

itboxs 2020. 12. 14. 07:59
반응형

Flask : 요청 변수의 현재 페이지


템플릿에서 현재 어떤 페이지에 있는지 어떻게 알 수 있습니까? 나는 page특히 일부 request.xxx가 나에게 정보를 제공 할 수 있다는 것을 알고있을 때 와 같은 변수를 전달하지 않을 것 입니다.

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

만큼 당신이 가져온으로 request, request.path이 정보를 포함해야합니다.


애플리케이션의 flask에서 먼저 가져 오기 요청을합니다. 그런 다음 템플릿으로 전달하지 않고 사용할 수 있습니다.

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

URL 규칙을 변경하거나 사이트를 하위 폴더 아래에 배포하는 경우 경로를 업데이트해야하므로 request.path를 사용하는 것은 적절한 접근 방식이 아닌 것 같습니다.

대신 request.url_rule.endpoint를 사용하십시오. 여기에는 실제 경로와 관계없이 실제 엔드 포인트 이름이 포함됩니다.

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

템플릿에서 :

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

행운을 빕니다!


하드 코딩 된 URL을 사용하지 않으려면 url_for다음과 같은 기능을 사용할 수 있습니다 .

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

이 경우 index, foo, bar 및 baz는 Python 코드에서 다음과 같이 사용되는 함수 이름입니다.

@app.route('/')
def index():

시험

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

이것은 나를 위해 일했습니다.


URL에 더 많은 내용이있는 경우 .split 을 사용할 수도 있습니다 .

예:

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

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

"제품"만 반환됩니다.

참고 URL : https://stackoverflow.com/questions/8676455/flask-current-page-in-request-variable

반응형