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
forreal
V2EX  ›  Python

求助如何在 flask 中访问未定义的 url 时重定向到其他页面?

  •  
  •   forreal · 2014-07-17 20:23:31 +08:00 · 8250 次点击
    这是一个创建于 3765 天前的主题,其中的信息可能已经有所发展或是发生改变。
    假如我定义了一个url为/<int:id>,而没有定义/<string>.
    此时我访问/abc,会出现错误,生产模式下会报500错误
    如何写才能在访问不存在的url 时返回404?
    10 条回复    2014-07-17 22:18:12 +08:00
    ccbikai
        1
    ccbikai  
       2014-07-17 20:35:31 +08:00
    @app.errorhandler(404)
    def page_not_found(error):
    return render_template('page_not_found.html'), 404

    http://docs.jinkan.org/docs/flask/quickstart.html#id15
    P9
        2
    P9  
       2014-07-17 20:37:10 +08:00   ❤️ 1
    访问不存在的 不就是返回404的么。 我估计你这个是进到/<int:id>里了
    forreal
        3
    forreal  
    OP
       2014-07-17 20:42:23 +08:00
    @ccbikai
    我指的是访问未定义的url 时如何跳转,不是如何设置错误页面,可能是我没说明白
    20150517
        4
    20150517  
       2014-07-17 20:43:40 +08:00 via Android   ❤️ 1
    @forreal 自己在这个def下写个跳转逻辑不就可以了,一个原理啊
    forreal
        5
    forreal  
    OP
       2014-07-17 20:44:34 +08:00
    @P9
    可是确实没返回404,我也很奇怪。可是id 被我限定为 int了啊
    skybr
        6
    skybr  
       2014-07-17 20:47:02 +08:00   ❤️ 1
    看你app的错误日志, 没匹配就是404, 500是程序哪里出错了.
    forreal
        7
    forreal  
    OP
       2014-07-17 20:47:30 +08:00
    @20150517
    就是说不用<int:id>,所有的都用<id>,然后在函数内部自己判断?
    感觉提供了<int:id>这种形式,不用太可惜了
    forreal
        8
    forreal  
    OP
       2014-07-17 20:54:17 +08:00
    @ccbikai
    @P9
    @20150517
    @skybr
    感谢各位,根据skybr的提醒,我重建一个工程,然后重新做了一个实验,发现是Not Found.
    可能是我哪里写错了
    arcas
        9
    arcas  
       2014-07-17 21:14:54 +08:00   ❤️ 1
    报500 是你程序问题,,
    forreal
        10
    forreal  
    OP
       2014-07-17 22:18:12 +08:00
    @arcas
    是的,我写的一个装饰器函数出的问题。
    装饰器中传入的view函数应该写成func(*args,**kwargs),而我之前以为装饰器函数不需要位置参数,写成了func(**kwargs)。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5415 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 08:53 · PVG 16:53 · LAX 00:53 · JFK 03:53
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.