如果我不使用 Web2py 中的 layout.html,如何将 Ajax 包含到视图中

How to include Ajax into a View if I don't use the layout.html in Web2py

我在不使用 layout.html 的项目中使用 html 模板。我从视图中删除了 {{extend 'layout.html'}},但是,我仍然想使用 views/web2py_ajax.html

我尝试了几件事:首先我尝试将 {{include 'web2py_ajax.html'}} 放入我的 new_template.html 然后 {{include}} 但这不起作用。

然后,我将代码从 views/web2py_ajax.html 文件复制到我的 new_template.html 视图中,但似乎没有用。

当我说 new_template.html 时,我的意思是我使用的 html 模板不是 layout.html

new_template.htmlhead 中,在 new_template.html 的所有 css 链接和 js 脚本下面,我放置了这个:

{{include 'web2py_ajax.html'}}
    {{
  response.files.insert(0,URL('static','css/web2py.css'))
  response.files.insert(1,URL('static','css/bootstrap.min.css'))
  response.files.insert(2,URL('static','css/bootstrap-responsive.min.css'))
  response.files.insert(3,URL('static','css/web2py_bootstrap.css'))
  }} 

然后,在 new_template.htmlbody 中,我输入:

{{include}}

我测试了 form submit 并且错误消息是纯黑色文本而不是红色背景框中的白色文本错误消息。我知道必须有更好的方法来测试这个,但我有点迷路了。最好的方法是什么?

非常感谢您对此提供帮助。

您必须在包含 web2py_ajax.html 之前完成 response.files,因为该视图包含 response.include_files() 调用,它实际上生成 HTML 以加载页。所以,应该是:

{{
  response.files.insert(0,URL('static','css/web2py.css'))
  response.files.insert(1,URL('static','css/bootstrap.min.css'))
  response.files.insert(2,URL('static','css/bootstrap-responsive.min.css'))
  response.files.insert(3,URL('static','css/web2py_bootstrap.css'))
}}
{{include 'web2py_ajax.html'}}

您还必须确保 web2py_ajax.html 加载的所有静态资源实际可用(例如,web2py.js 必须位于应用程序的 /static/js 文件夹中)。

最后,您正在加载的特定页面的视图必须以:

{{extend 'new_template.html'}}

虽然您不必使用脚手架应用程序中的 layout.html 布局,但如果您是从头开始创建自己的布局,仍然建议您从 head 复制一些代码layout.html。以脚手架应用程序为基础开始,然后删除不需要的内容也是一个好主意——这样一开始,您就可以在正确的位置获得所需的静态资产。