2011-12-30 19 views
49

एक टेम्पलेट में, मैं वर्तमान में किस पृष्ठ पर हूं, मैं कैसे प्राप्त करूं? मैं 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> 

उत्तर

50

जब तक आप आयात कर लिया है के रूप में request, request.path इस जानकारी को शामिल करना चाहिए।

+3

ध्यान दें कि यह अन्य चर के लिए सच नहीं है। यह काम करता है क्योंकि 'अनुरोध' टेम्पलेट संदर्भ में चर [डिफ़ॉल्ट रूप से डाला गया] [http://flask.readthedocs.org/en/latest/templating/#standard-context) में से एक है। –

42

आपके आवेदन में फ्लास्क से पहला आयात अनुरोध। तो फिर तुम यह टेम्पलेट से गुजर बिना उपयोग कर सकते हैं:

<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

'अनुरोध' आयात किया गया ('* .py' फ़ाइल में), अभी भी त्रुटि हो रही है: jinja2.exceptions.UndefinedError: 'request' अपरिभाषित है –

36

request.path का उपयोग करते हुए एक उचित दृष्टिकोण होना प्रतीत नहीं होता है के बाद से आप URL वाले सभी नियमों को या के तहत अपनी साइट की तैनाती के मामले में रास्तों से अपडेट करना होगा एक उपफोल्डर

request.url_rule.endpoint उपयोग इसके बजाय, यह वास्तविक पथ की वास्तविक endpoint नाम स्वतंत्र शामिल हैं:

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

एक टेम्पलेट में:

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

गुड लक!

+4

यह सही उत्तर है। अन्य हार्डकोडेड पथ का उपयोग करते हैं, जो एक बहुत बुरा विचार है। –

+1

यह केवल काम करता है आप पृष्ठ के प्रति अनुभाग एक मार्ग का उपयोग कर रहे हैं। अन्यथा यह वह नहीं होगा जो आप खोज रहे हैं। = \ – flamusdiu

+0

नहीं, यह सच नहीं है। आपके एंडपॉइंट नामों में कुछ संरचना हो सकती है (जैसे blueprint.subsection.page) और .startswith ('blueprint.subsection।') का उपयोग करके तुलना करें। बस एक उदाहरण। – negus

3

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

प्रयास करें यह एक मेरे लिए काम किया।

1

हार्ड-कोडेड 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 %} 

इस मामले सूचकांक, foo, बार में और baz समारोह के नाम, अपने अजगर कोड में इस तरह इस्तेमाल किया होगा:

@app.route('/') 
def index(): 
संबंधित मुद्दे