Display links to new webpages created
flask, heroku, python
Solution
All the routes for an application are stored on `app.url_map` which is an instance of `werkzeug.routing.Map`. That being said, you can iterate over the `Rule` instances by using the `iter_rules` method:
from flask import Flask, render_template, url_for
app = Flask(__name__)
@app.route("/all-links")
def all_links():
links = []
for rule in app.url_map.iter_rules():
if len(rule.defaults) >= len(rule.arguments):
url = url_for(rule.endpoint, **(rule.defaults or {}))
links.append((url, rule.endpoint))
return render_template("all_links.html", links=links)
{# all_links.html #}
<ul>
{% for url, endpoint in links %}
<li><a href="{{ url }}">{{ endpoint }}</a></li>
{% endfor %}
</ul>
Problem
I'm building a website with Python (using heroku) and I would like to create a "newest submissions" section. That is, when I create a new `@app.route(blah)` in my Python app, I want a link to the new page to show up under the "newest submissions" section on my homepage. Is this possible? EDIT: here's my code ``` import os import json from flask import Flask, render_template, url_for from werkzeug.routing import Map, Rule, NotFound, RequestRedirect, BaseConverter app = Flask(__name__) @app.route('/') def index(): return render_template('welcome.html') @app.route('/about', endpoint='about') def index(): return render_template('about.html') @app.route('/contact', endpoint='contact') def index(): return render_template('contact.html') @app.route('/all-links', endpoint='all-links') def all_links(): links = [] for rule in app.url_map.iter_rules(): url = url_for(rule.endpoint) links.append((url, rule.endpoint)) return render_template('all_links.html', links=links) if __name__ == '__main__': # Bind to PORT if defined, otherwise default to 5000. port = int(os.environ.get('PORT', 5000)) app.run(host='0.0.0.0', port=port) ``` and the all_links.html file ``` <!DOCTYPE HTML> <html lang="en"> <head> <title>links</title> </head> <body> <ul> {% for url, endpoint in links %} <li><a href="{{ url }}">{{ endpoint }}</a></li> {% endfor %} </ul> </body> </html> ```