为Flaskurl传递空/无参数(@主要路线/)

2024-09-30 20:27:18 发布

您现在位置:Python中文网/ 问答频道 /正文

下面的代码从WTForm获取变量,用户可以在其中输入名称或id,这将用于数据库中的查询。问题是,当只提交一个字段时,URL会“中断”,因为,例如,如果没有提交piname,那么URL将看起来像“/find_pi//1424524”。有没有什么方法可以在不破坏代码的情况下修复这个问题?我的下一个任务涉及多个“可选”字段,这些字段更难拆分。在

    @main.route('/find_pi/', methods=('GET', 'POST'))
    def pick_pi():
        form = PeopleFinder()
        if form.validate_on_submit():
            piname = form.piname.data
            piid = form.piid.data
            return redirect(url_for('.piresults', piname=piname, piid=piid)
        return render_template('specify_pi.html', form=form)

    @main.route('/find_pi/<piname>/<piid>')
    def find_pi(piname, piid):
        if piname != None:
            entries = Grant.query.filter(Grant.pi_name==(piname)).all()
            return render_template('piresults.html', entries=entries)
        if piid != None:
            entries = Grant.query.filter(Grant.pi_id==(piid)).all()
            return render_template('piresults.html', entries=entries)

谢谢你!在


Tags: 代码formidreturnifhtmlpitemplate
1条回答
网友
1楼 · 发布于 2024-09-30 20:27:18

如果您需要piname或{},有几种方法可以实现这一点:

1.独立路线

@main.route('find_pi/<str:piname>') 
def find_pi_by_name(piname):
    entries = Grant.query.filter(Grant.pi_name==(piname)).all()
    return render_template('piresults.html', entries=entries)

@main.route('find_pi/<int:piid>') # int ensures that piid is a number
def find_pi_by_id(piid):
    entries = Grant.query.filter(Grant.pi_id==(piid)).all()
    return render_template('piresults.html', entries=entries)

2.同时检查piname和piid的单一路由

^{pr2}$

如果您计划添加其他可选参数,那么应该使用querystring,基本url不是放置可选元素的好地方。在

相关问题 更多 >