如何在Flask中进行高级url路由?

时间:2019-06-14 19:46:43

标签: python flask

这是我的代码:

@app.route("/")
@app.route("/<type>")
@app.route('/page/<int:page>')
def index(type="top", page=0):
    perpage=5
    startat=page*perpage
    cur = mysql.connection.cursor()
    if type=='top':
        cur.execute("SELECT * FROM posts ORDER BY likes DESC LIMIT %s, %s", (startat,perpage))
        data = cur.fetchall()
        cur.close()
        return render_template("index.html", dat=data)
    elif type=='new':
        cur.execute("SELECT * FROM posts ORDER BY created_at DESC LIMIT %s, %s", (startat,perpage))
        data = cur.fetchall()
        cur.close()
        return render_template("index.html", dat=data)

我正试图使分页排序一起工作,而不会出现问题:

  • /page/1有效
  • 但是/new/page/1无法正常工作

那该如何解决呢?

1 个答案:

答案 0 :(得分:0)

您创建了一个错误的url架构:有两个相似的url:@app.route("/page")@app.route("/<type>"),因为type是一个字符串变量,可以分配给page值。

无论如何,要解决您的问题,您需要创建一个不会混淆的URL。例如:

@app.route("/")
@app.route("/page/<type>/")
@app.route('/page/<type>/<int:page>')
def index(type="top", page=0):
    perpage=5
    #...

在这种情况下,不能将type分配给空字符串作为默认值。

其他可能的解决方案:

@app.route("/")
@app.route("/some-text/<type>")
@app.route('/page/<int:page>')
def index(type="top", page=0):
    perpage=5