तो आप wikipedia article से शब्दावली का उपयोग करने के लिए "स्थान" ब्रेडक्रंब के बजाय "पथ/इतिहास" ब्रेडक्रंब के बाद हैं?
यदि आप उपयोगकर्ता के आने वाले लिंक के इतिहास तक पहुंच बनाना चाहते हैं, तो आपको उन्हें एक सत्र में सहेजना होगा। मुझे ऐसा करने के लिए एक सजावटी बनाने में जाना पड़ा है।
breadcrumb.py
:
import functools
import collections
import flask
BreadCrumb = collections.namedtuple('BreadCrumb', ['path', 'title'])
def breadcrumb(view_title):
def decorator(f):
@functools.wraps(f)
def decorated_function(*args, **kwargs):
# Put title into flask.g so views have access and
# don't need to repeat it
flask.g.title = view_title
# Also put previous breadcrumbs there, ready for view to use
session_crumbs = flask.session.setdefault('crumbs', [])
flask.g.breadcrumbs = []
for path, title in session_crumbs:
flask.g.breadcrumbs.append(BreadCrumb(path, title))
# Call the view
rv = f(*args, **kwargs)
# Now add the request path and title for that view
# to the list of crumbs we store in the session.
flask.session.modified = True
session_crumbs.append((flask.request.path, view_title))
# Only keep most recent crumbs (number should be configurable)
if len(session_crumbs) > 3:
session_crumbs.pop(0)
return rv
return decorated_function
return decorator
और यहाँ एक परीक्षण आवेदन है कि यह दर्शाता है है। ध्यान दें कि मैंने अभी फ्लास्क के अंतर्निहित क्लाइंट साइड सत्र का उपयोग किया है, तो आप शायद Flask-KVsession जैसे उत्पादन में अधिक सुरक्षित सर्वर-साइड सत्र का उपयोग करना चाहेंगे।
#!/usr/bin/env python
import flask
from breadcrumb import breadcrumb
app = flask.Flask(__name__)
@app.route('/')
@breadcrumb('The index page')
def index():
return flask.render_template('page.html')
@app.route('/a')
@breadcrumb('Aardvark')
def pagea():
return flask.render_template('page.html')
@app.route('/b')
@breadcrumb('Banana')
def pageb():
return flask.render_template('page.html')
@app.route('/c')
@breadcrumb('Chimp')
def pagec():
return flask.render_template('page.html')
@app.route('/d')
@breadcrumb('Donkey')
def paged():
return flask.render_template('page.html')
if __name__ == '__main__':
app.secret_key = '83cf5ca3-b1ee-41bb-b7a8-7a56c906b05f'
app.debug = True
app.run()
और यहाँ templates/page.html
की सामग्री है:
<!DOCTYPE html>
<html>
<head><title>{{ g.title }}</title></head>
<body>
<h1>{{ g.title }}</h1>
<p>Breadcrumbs:
{% for crumb in g.breadcrumbs %}
<a href="{{ crumb.path }}">{{ crumb.title }}</a>
{% if not loop.last %}»{% endif %}
{% endfor %}
</p>
<p>What next?</p>
<ul>
<li><a href="/a">Aardvark</a>?</li>
<li><a href="/b">Banana</a>?</li>
<li><a href="/c">Chimp</a>?</li>
<li><a href="/d">Donkey</a>?</li>
</ul>
</body>
</html>
इस भयानक है, लेकिन क्या अगर आप 'स्थान' आधारित टुकड़ों करने के लिए कोशिश कर रहे हैं? क्या आप इसके लिए भी एक जवाब जोड़ सकते हैं? मुझे लगता है कि यह बहुत आसान होगा। – chrickso
@chrisckso: मुझे लगता है कि 'स्थान' आधारित crumbs क्या है [bread.py] (http://russell.ballestrini.net/a-homegrown-python-bread-crumb-module/) (जैसा कि [प्रश्न] में उल्लिखित है] (http://stackoverflow.com/q/13444666/445073)) करता है? क्या आपने कोशिश की है? – Day
हां मैंने इसे देखा लेकिन मैं इसके प्रशंसक नहीं हूं कि सिर्फ यूआरएल खींच रहा हूं क्योंकि मैं शब्दों को अनुकूलित करना चाहता हूं। मैं @ ब्रेडट्रिल (['क्रंब ए', url_for ('...)], [' क्रंब बी ', url_for (' ...)] जैसे सजावट करने का सबसे आसान तरीका ढूंढ रहा हूं) और हमेशा एक पास प्रत्येक मार्ग के लिए breadtrail = breadtrail टाइप किए बिना जिन्जा को उस डेटा से भरा हुआ ब्रेडट्रिल var। – chrickso