V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
Hualin
V2EX  ›  Python

请教:Flask url_for 的 build error

  •  
  •   Hualin · 2013-02-09 09:57:31 +08:00 · 6235 次点击
    这是一个创建于 4310 天前的主题,其中的信息可能已经有所发展或是发生改变。
    请教:Flask url_for 的 build error
    ===
    最近业余时间写一个 flask 的网站

    我所有的 URL RULE 全部写在 `init_route.py` 里面了,其中有个一带参数的 url 规则是:

    from subject import view_subject
    app.add_url_rule('/all_subjects/<subject_id>', 'subject', view_subject, methods=['GET', 'POST'])
    然后我在另一个 view 的响应函数中最后返回:

    return redirect(url_for('view_subject', subject_id = str(subject_id)))

    然后报错说: BuildError: ('view_subject', {'subject_id': '2'}, None)

    但是注意,view_subject 这个 view 在之前的流程中是有正常显示过的,只是没有用 url_for 来调用。我不理解,这和我在 `init_route.py` 中以 `add_url_rule` 定义相应函数而不是用 decorator 修饰有关吗?可是,以我的理解,decorator 只能定义想用函数的正上方加上才可以,可是我的响应函数和 `init_route.py` 不在一个文件,也不该在一个文件。我记得之前在 jinja template 中也出现类似参数的 `url_for` 调用失败,最后我不得不手动拼接 URL。

    flask 自己给的例子全是用 decorator,而 flask 关于 `url_for` 的官方文档也没有让我能明白的例子,

    例如,如果我的 URL 有三个参数:
    from form import display_block
    app.add_url_rule('/all_subjects/<subject_id>/<block_name>/<mode>', 'block', display_block)

    以上的 url 我在 jinja template 中是用手动拼接来相应的。

    真郁闷

    求大神帮帮 我感觉我可能有那个常识性的东西没搞
    3 条回复    1970-01-01 08:00:00 +08:00
    Hualin
        1
    Hualin  
    OP
       2013-02-09 10:00:20 +08:00
    辞旧迎新,大家蛇年吉祥喽~~~~
    yinian1992
        2
    yinian1992  
       2013-02-11 16:26:10 +08:00   ❤️ 1
    你在 add_url_rule 里指定了 endpoint 为 'subject' 了。
    所以你在 url_for 里也应该用 'subject'。

    详情见:
    http://docs.torriacg.org/docs/flask/api.html?highlight=add_url_rule#flask.Flask.add_url_rule
    http://docs.torriacg.org/docs/flask/api.html?highlight=url_for#flask.url_for
    Hualin
        3
    Hualin  
    OP
       2013-02-11 19:31:44 +08:00
    搞定啦

    真的很感谢;大年初二真给力!
    我把 endpoint 和 view_func 这两个概念给搞混了。
    end_point 是 static 里面的 HTML 页
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5985 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 02:02 · PVG 10:02 · LAX 18:02 · JFK 21:02
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.