Flask url_for产生错误的URL

时间:2013-04-09 18:15:30

标签: python flask url-for

烧瓶中的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

2 个答案:

答案 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
相关问题