烧瓶中的url_for生成器不能用于我的一个视图(它适用于其他视图)。生成器提供/user/?name=Joe
,而我期待/u/Joe
。
在模板中,我尝试使用以下内容获取用户页面的网址:{{ url_for('user', name = g.user.name ) }}
这是相应的视图功能:
@app.route('/u/<name>')
@login_required
def user(name):
起初这是有效的,但有些事情发生了变化。我试过没有运气更改视图名称和网址。
有什么想法?我对此感到茫然...
完整的应用程序可在GitHub上找到:https://github.com/joehand/weight-and-more-tracker
修改:装饰的@login_required
是Flask-login提供的。
此外,删除<name>
变量无法解决问题。然后,该网址只有/user
。
答案 0 :(得分:3)
在api.py中,您正在注册一个名为“user”的视图,该视图可能与名为“user”的方法冲突。
答案 1 :(得分:0)
你是否包裹过#39;您在login_required
装饰器中的功能?在您的情况下,name
作为查询字符串提供给url,而不是烧瓶视图函数参数 - 也许flask没有抓住您的装饰user
视图函数的参数规范。
来自docs:
所以让我们实现这样的装饰器。装饰器是一个功能 返回一个函数。其实很简单。你唯一要做的事情 在实现这样的事情时要记住更新 名称,模块以及功能的其他一些属性。这经常被遗忘,但你不必手工做,有一个 用作装饰器的函数(
functools.wraps()
)。from functools import wraps from flask import g, request, redirect, url_for def login_required(f): @wraps(f) def decorated_function(*args, **kwargs): if g.user is None: return redirect(url_for('login', next=request.url)) return f(*args, **kwargs) return decorated_function