3

烧瓶中的 url_for 生成器不适用于我的一个视图(它适用于其他视图)。生成器/user/?name=Joe在我期望的时候给出/u/Joe

在模板中,我尝试使用以下方法获取用户页面的 URL:{{ url_for('user', name = g.user.name ) }}

这是对应的视图函数:

@app.route('/u/<name>')
@login_required
def user(name):

起初这是可行的,但发生了一些变化。我尝试更改视图名称和 url,但没有成功。

有什么想法吗?我在这方面不知所措...

完整的应用程序可在 GitHub 上找到:https ://github.com/joehand/weight-and-more-tracker

编辑@login_required装饰是 Flask-login 提供的。

此外,删除<name>变量并不能解决问题。那么 URL 就是/user.

4

2 回答 2

3

在 api.py 中,您正在注册一个名为“user”的视图,该视图可能与名为“user”的方法冲突。

于 2013-04-09T20:30:04.323 回答
0

login_required您是否在装饰器中“包装”了您的功能?在您的情况下name,作为查询字符串而不是烧瓶视图函数参数提供给 url - 也许烧瓶没有掌握装饰user视图函数的参数规范。

来自文档

所以让我们实现这样一个装饰器。装饰器是一个返回函数的函数。其实很简单。在实现这样的事情时,唯一需要记住的是更新函数的 名称模块和其他一些属性。这通常会被遗忘,但您不必手动执行此操作,有一个函数可以像装饰器 ( 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
于 2013-04-09T18:53:22.507 回答