Wpis z mikrobloga

Hej Mirki od #python i #flask :)

Może pytanie dość trywialne, ale niestety nie mogę sobie z tym poradzić.

Mam we #flask route:
@app.route('/page/', methods=['GET'])
I wszystko jest ok.
Natomiast chciałbym jeszcze dodać ścieżkę tylko dla '/page', która będzie redirectem do index, czyli jak myślałem że to zrobić:

@app.route('/page/', methods=['GET'])
@app.route('/page', methods=['GET'])
def page(project):
if project:
return render_template(pages/{project}.html')
else:
return redirect(url_for('index'))

folder pages zawiera teplatki z project, ale 'page' jako takiego nie ma, chcę żeby wchodzic na localhost:5000/page/ zadziałał redirect do 'index'

Jak można to zrobić?
  • 9
@sokytsinolop: czy return nie powinien działać jako zwrotka funkcji?
Tak czy inaczej, nie działa:

@app.route('/page/', methods=['GET'])
def page(project):
return render_template(f'projects/{project}.html') # wcięcie

@app.route('/page', methods=['GET'])
return redirect(url_for('index')) # z wcięciem lub bez - wywala błąd
@sokytsinolop: To w sumie mógłbyć dobry ruch :D Natomiast teraz, gdy mam dwa dekoratory i dwie funkcje do page i page/project to dostaję błąd:
AssertionError: View function mapping is overwriting an existing endpoint function: page
@sokytsinolop: Mam to! : D
Druga funkcja musi się nazywać inaczej niż pierwsza, głupi błąd z mojej strony.

Całość teraz wygląda tak i działa:
@app.route('/page/', methods=['GET'])
def page():
return redirect(urlfor('index'))

@app.route('/page//', methods=['GET'])
def subpage(project):
return render
template(f'projects/{project}.html')

Dziękuję bardzo i pozdrawiam serdecznie : D