【问题标题】:Web2Py error: invalid function blog/thanksWeb2Py 错误:无效的功能博客/谢谢
【发布时间】:2016-03-15 13:48:38
【问题描述】:

我正在 Debian Linux 上使用 Web2Py 构建一个简单的博客。 我有一个名为 blog.py 的控制器,我在其中添加了以下函数以及一个 if 块:

def display_form():
    form = SQLFORM(db.blog)
    if form.process().accepted:
        session.flash = 'form accepted'
        redirect(URL('thanks'))
    elif form.errors:
        response.flash = 'form has errors'
    else:
        response.flash = 'please fill out the form'
    return locals()

我继续添加一个名为 blog/display_form.html 的“视图”html 文件,其中包含一个基本模板,如下所示:

{{extend 'layout.html'}}
<h1>Display Form</h1>
{{=form}}

我很好地加载了 "display_form" 博客页面,它成功地接受了所有输入,但它没有重定向到 thank you 页面。相反,浏览器会生成一个“invalid function blog/thanks”错误。

我尝试通过 Web2Py 管理界面删除已编译的应用程序,然后重新编译所有内容。还是不行。我为“谢谢”页面添加了一个“视图”,但这并没有改变任何东西。我重新启动了 Web2Py 框架和 Web 服务器,但仍然不行。 一些网站提到了可能的 routes.py 问题,但我很困惑为什么这会是相关的。

请帮忙, 我在这里碰壁了。

【问题讨论】:

    标签: python web2py debian-based


    【解决方案1】:

    因此,在调整了一些东西并删除了所有已编译的文件并重新从头开始之后,结果证明解决方案比我尝试的要简单得多。 我只是在前面提到的 blog.py 控制器中定义了一个名为 thanks 的函数,并返回了局部变量,如下所示:

    def thanks():
        return locals()
    

    然后我添加了一个 blog/thanks view 文件,带有一个基本的 html 标头,说明:

    Thank you for submitting the form!
    

    它最终将 display_form 博客页面按预期重定向到 thanks 页面,从而闪烁 form accepted 消息(也如预期的那样) .

    感谢您的帮助,安东尼! 干杯。

    【讨论】:

      【解决方案2】:

      当您只将一个参数传递给URL() 帮助器时,它假定参数是函数名并且控制器是当前控制器。由于当前控制器为blogURL('thanks')会生成如下URL:/yourapp/blog/thanks

      大概,您的thanks 函数位于不同的控制器中(可能是default.py),在这种情况下,对上述 URL 的请求将产生您观察到的错误。只需将 URL 更改为 URL('default', 'thanks')

      【讨论】:

      • 感谢您的回复。我在任何控制器中都没有 thanks 功能。 default.py 没有它。我需要定义它吗?如果是这样,知道如何去做吗?再次感谢。
      • 我想我在某处读到 blog.py 控制器应该包含 thanks 函数。 blog.py 目前只包含 display_formindexpostview 函数.我还在 db.py 中定义了 tables blog,但我不确定如何定义 thanks 函数.
      • 是不是类似:def redirectme(): redirect(URL('Thanks')),还是我需要其他参数?
      • 如果你想重定向到一个“谢谢”页面,当然你必须实际创建这样一个页面。在 web2py 中做到这一点的方法是在控制器和关联视图中创建一个函数。我不知道如果你还没有真正创建过这样的函数,为什么你会期望你的 blog.py 控制器包含 thanks 函数——毕竟,你是创建 blog.py 控制器的人。跨度>
      • 这是因为我是一个完整的 noob 就 Python 而言(或任何类型的编码)。我昨天才开始使用 Web2Py。因此发出求救的呼声。 ;) 无论如何,我接受了你的答案作为正确的答案。再次感谢。
      猜你喜欢
      • 2014-07-13
      • 2021-12-28
      • 2020-08-10
      • 2020-09-15
      • 2019-12-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-29
      相关资源
      最近更新 更多