Python 变量路由不在For循环中工作

Python 变量路由不在For循环中工作,python,flask,Python,Flask,我尝试使用数据库中的变量和for循环一次性创建多个路由 我试过这个 temp = "example" @app.route("/speaker/<temp>") def getSpeakerAtr(temp): return '''%s''' % temp temp=“示例” @附件路线(“/speaker/”) def GetSpeaker(温度): 返回“%s”%temp 它工作得很好。但是: for x in models.Speaker.objects:

我尝试使用数据库中的变量和for循环一次性创建多个路由

我试过这个

temp = "example"
@app.route("/speaker/<temp>")
def getSpeakerAtr(temp):
    return  '''%s''' % temp
temp=“示例”
@附件路线(“/speaker/”)
def GetSpeaker(温度):
返回“%s”%temp
它工作得很好。但是:

for x in models.Speaker.objects:
        temp = str(x.name)
        @app.route("/speaker/<temp>")
        def getSpeakerAtr(temp):
            return  '''%s''' % temp
适用于models.Speaker.objects中的x:
temp=str(x.name)
@附件路线(“/speaker/”)
def GetSpeaker(温度):
返回“%s”%temp
不起作用。错误消息:

文件“/Users/yang/Documents/CCPC-Website/venv/lib/python2.7/site-packages/flask/app.py”,第1013行,在decorator中 02:03:04 web.1 | self.add_url_规则(规则,端点,f,**选项)

**我想使用多个路由的原因是,我需要通过查询路由来获取对象的完整数据。例如: 如果我们键入此url:

//…演讲者/萨姆


我们可以得到“name”值为“sam”的对象。然后我可以使用这个对象中的所有值,比如bio或其他东西。**

您不需要多条路由。只有一条路线验证其价值,例如:

@app.route('/speaker/<temp>')
def getSpeakerAtr(temp):
    if not any(temp == str(x.name) for x in models.Speaker.objects):
        # do something appropriate (404 or something?)
    # carry on doing something else
@app.route(“/speaker/”)
def GetSpeaker(温度):
如果没有(models.Speaker.objects中x的temp==str(x.name)):
#做一些适当的事情(404或其他什么?)
#继续做别的事
或者关于你的真实意图:

@app.route('/speaker/<name>')
def getSpeakerAtr(name):
    speaker = # do something with models.Speaker.objects to lookup `name`
    if not speaker: # or whatever check is suitable to determine name didn't exist
        # raise a 404, or whatever's suitable
    # we have a speaker object, so use as appropriate
@app.route(“/speaker/”)
def GetSpeaker(名称):
speaker=#对models.speaker.objects执行某些操作以查找`name`
如果不是演讲者:#或任何适合确定姓名的检查都不存在
#提出404或任何合适的方案
#我们有一个speaker对象,因此请根据需要使用

谢谢您的回答!但是我对后端开发非常陌生。我在问题中添加了更多信息,你能看一下并帮我定制一下代码吗?@yang好的,你仍然不需要像我已经说过的那样需要多个路由。您只有一条路由,然后使用传递的值进行查找。。。如果你有一个1000万个名字的数据库,你不需要/不想要1000万条路由来处理它。使用
temp
name
或任何您正在调用的名称,然后使用
models.Speaker.objects
查找该名称以获取您的对象。如果它找不到它,404或其他东西,那么就使用你想得到的返回的对象。很聪明。但是我没有使用代码(我无法理解它是如何工作的),而是使用了一个更原始的解决方案:Speaker=models.Speaker.objects.get(name=name)这种设计有一些根本性的错误,因为函数调用中的
temp
参数
getspeakerater(temp)
将隐藏在
getSpeaker
上方定义的
temp
getspeakerater
内部的
temp
值始终是在其
/speaker/
部分之后作为URL的一部分给出的值。