【问题标题】:Flask -weird routing and URL error?Flask - 奇怪的路由和 URL 错误?
【发布时间】:2014-03-02 15:35:00
【问题描述】:

我的应用程序中有 2 条(类似的)路线。一种是针对上面有单个图像的页面,一种是针对上面有多个图像的页面。用于制作唯一 url 的变量只是随机生成的,routing_id(单个图像页面)为 7 个字符,gallery_routing 为 6。 路线如下所示:

@app.route('/<routing_id>')
def display_image_page(routing_id):
    stuff
    return render_template("image-page.html", template variables go here)

@app.route('/<gallery_routing>' )
def display_gallery(gallery_routing):
    other stuff
    return render_template("gallery-page-vertical.html", other template vars)

在调用它们的函数中,它们像任何其他 url 一样生成:

url_for('display_image_page', routing_id=routing_id)

url_for('display_gallery', gallery_routing=gallery_routing)

在测试我的应用程序时,如果我尝试访问这些 URL,我会收到奇怪的错误,例如从访问该 URL 时甚至不应该运行的函数中获取数据库错误,或者只是简单的 404。所有这些 url 映射到的只是几个函数,它们做一些事情并返回一个 render_template。如果我通过在第一个斜杠上添加一个斜杠来稍微更改 URL 规则,在第二个斜杠之前添加另外几个斜杠和一些文本(没有斜杠),那么它们可以完美地工作:

@app.route('/<routing_id>/')

@app.route('/arbitrary_text/<gallery_routing>')

这里到底发生了什么?我没有直接访问文件,只是在它们上显示文件的页面,那么为什么斜杠会改变事情呢?我不想在其中任何一个上使用斜杠,也不想在我的 gallery_routing 之前有另一个子目录。我的应用程序中还有大约 3 条其他路线,这些路线只是静态页面,如下所示:

@app.route('/info')
@app.route('/thanks')

它们都工作正常。我看到的唯一变化是 url 规则中的一个变量。如果它有所不同,我将使用子域进行不同的路由(即指向实际图像文件的链接),并且使用自定义服务器名称,所以我在http://local.dev:5000/ 访问应用程序,但是我不明白这会如何改变事情?我已阅读有关 URL 构建的文档,但找不到任何帮助。谢谢你。

【问题讨论】:

    标签: python url flask werkzeug


    【解决方案1】:

    当您说 @app.route('/&lt;routing_id&gt;')@app.route('/&lt;gallery_routing&gt;' ) 时,您是在尝试在不同的视图中管理相同的 url 模式。

    看:

    /abracadabra -> /<routing_id> 
        ---> routing_id = abracadabra
    /abracadabra -> /<gallery_routing> 
        ---> gallery_routing = abracadabra
    

    应用无法猜出你的意思

    当然,这是可行的

    @app.route('/<routing_id>/')
    @app.route('/arbitrary_text/<gallery_routing>')
    

    因为

    /arbitrary_text/abracadabra -> /<routing_id> 
        -x-> routing_id = abracadabra
    /arbitrary_text/abracadabra -> /arbitrary_text/<gallery_routing> 
        ---> gallery_routing = abracadabra
    

    没有什么奇怪的

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-10-04
      • 2013-05-20
      • 2017-08-03
      • 1970-01-01
      • 2023-03-30
      • 2020-11-06
      • 2015-07-10
      • 2014-11-04
      相关资源
      最近更新 更多