首页 > 解决方案 > 如何在烧瓶中制作高级 url 路由?

问题描述

这是我的代码:

@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)

我正在尝试通过毫无问题地一起工作来按顺序进行分页:

那么如何解决这个问题呢?

标签: pythonflask

解决方案


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

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

@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

推荐阅读