2015-09-27 3 views
0

Я работаю через RealPython, и у меня возникают проблемы с динамическим маршрутом колбы.Flask dynamic route not working - Real Python

Все, казалось, работало до динамического маршрута. Теперь, если я попытаюсь ввести «поисковый запрос» (т. Е. Localhost: 5000/test/hi), страница не найдена. localhost: 5000 все еще отлично работает.

# ---- Flask Hello World ---- # 

# import the Flask class from the flask module 
from flask import Flask 

# create the application object 
app = Flask(__name__) 


# use decorators to link the function to a url 
@app.route("/") 
@app.route("/hello") 
# define the view using a function, which returns a string 
def hello_world(): 
    return "Hello, World!" 

# start the development server using the run() method 
if __name__ == "__main__": 
    app.run() 


# dynamic route 
@app.route("/test/<search_query>") 
def search(search_query): 
    return search_query 

Я не могу видеть, что другие люди, использующие RealPython имели проблемы с тем же кодом, так что я не уверен, что я делаю неправильно.

+0

Так вы положили динамический маршрут после 'app.run()'? –

+0

Ну, ваш код может хорошо работать здесь. 'localhost: 5000/test/hi',' localhost: 5000' или 'localhost: 5000/hello' вернет правильную строку, и я не получил ошибку 404. –

+0

Он работал после перезагрузки моего компьютера. –

ответ

2

Причина, по которой это не работает, потому что колба никогда не узнает, что у вас есть другой маршрут, другой / и /hello, потому что ваша программа застревает на app.run().

Если вы хотите добавить это все, что вам нужно сделать, это добавить новый маршрут перед тем вызывающему app.run() как так:

# ---- Flask Hello World ---- # 

# import the Flask class from the flask module 
from flask import Flask 

# create the application object 
app = Flask(__name__) 


# use decorators to link the function to a url 
@app.route("/") 
@app.route("/hello") 
# define the view using a function, which returns a string 
def hello_world(): 
    return "Hello, World!" 

# dynamic route 
@app.route("/test/<search_query>") 
def search(search_query): 
    return search_query 

# start the development server using the run() method 
if __name__ == "__main__": 
    app.run(host="0.0.0.0", debug=True, port=5000) 

Теперь это будет работать.

Примечание: Вам не нужно менять конфигурацию прогона внутри app.run. Вы можете просто использовать app.run() без каких-либо аргументов, и ваше приложение будет нормально работать на вашем локальном компьютере.

enter image description here