【发布时间】: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 构建的文档,但找不到任何帮助。谢谢你。
【问题讨论】: