Flask app route for paths that start with X

11,478

I would do a catch-all url and then, try to use a wildcard with it from inside the view:

@app.route('/<path:text>', methods=['GET', 'POST'])
def all_routes(text):
    if text.startswith('favicon'):
        #do stuff
    else:
        return redirect(url_for('404_error'))

you can use string too:

@app.route('/<string:text>', methods=['GET'])

but using string wouldn't catch / strings. so if string is used, url's containing something like favicon/buzz wouldn't be cached by it, path in the other hand would catch /'s too. so you should go with first option.

you can look at routing documentation in flask site. and you should create a better conditional than if x in Y because it will fail if you were passed something like /thingfavicon

Share:
11,478
Lennart Rolland
Author by

Lennart Rolland

I work as a IT consultant for a small but capable consulting firm in Bergen, Norway. I also enjoy technology in my spare time. My latest project is http://octomy.org

Updated on June 28, 2022

Comments

  • Lennart Rolland
    Lennart Rolland almost 2 years

    I am a beginner with Flask and python. I want to create a handler function for paths that start with "/favicon". For example the following should be handled:

    • /favicon
    • /faviconFOO
    • /favicon_bar
    • /favicon/buzz
    • /favicon1337

    The following should not be handled:

    • /favico
    • /favicoN
    • /whatever

    If Flask supporeted wildcards, it would be "/favicon*"

    EDIT: I don't need support for regular expressions.

    How can I do this?

    • ZdaR
      ZdaR over 6 years
      You want all routes: favicon, faviconFOO, favicon_bar etc. to point same handle, then you may look at this thread
    • Lennart Rolland
      Lennart Rolland over 6 years
      Yes exactly. If it was a wildcard it would be /favicon*
    • Lennart Rolland
      Lennart Rolland over 6 years
      I would not say it's a duplicate because it is much more spesific than the other question. Besides, I don't care if it is solved using regex or not.
    • ZdaR
      ZdaR over 6 years
      It can be perfectly solved with regex, I guess it would be the best way to reduce redundancy in this case(flask). However Django framework has more convenient support for regexs'.
    • senaps
      senaps over 6 years
      please let me know if the answer did what you wanted if you found another way to do it.