【问题标题】:Can I use javascript with bottle (framework)?我可以将javascript与瓶子(框架)一起使用吗?
【发布时间】:2011-07-30 03:28:26
【问题描述】:

我正在尝试使用瓶子(python 网络框架)显示一个 html 页面。该页面嵌入了 javascript,但当我使用瓶子服务时它不会显示它。

我使用的 JS 是 EditArea,我可以按照自己的方式清理它,并将其放入一个 html 页面,当我在 chrome 中打开页面时,它会正确显示。但是当我使用瓶子时:

@route('/edit')
def edit():
    return template('editarea')


@route('/edit_area')
def edit_area():
    send_file('example1.html', root='path/to/file/')

然后转到 http://localhost:8080/edit 或 /edit_area,我看到的页面没有任何花哨的 javascript 功能。

最终我想把它连接起来(EditArea 是文本区域,我将使用它来接受希望我能够运行的代码......但这是一个单独的问题......),但现在它应该做的就是显示页面和javascript。 JS 尽可能简单地放在 html 中。这两个块使用不同的文件,但它们只是同一个 html 文件的副本,一个带有 .html,另一个带有 .tpl 扩展名。

<title>EditArea - the code editor in a textarea</title> 
    <script language="Javascript" type="text/javascript"     src="../edit_area/edit_area_full.js"></script> 
    <script language="Javascript" type="text/javascript"> 
        // initialisation
        editAreaLoader.init({

...然后就是所有的 JS 代码(不是我写的)。

在启动我导入的服务器的文件中:路由、运行、调试、模板、请求、send_file 和来自瓶的错误;和 sqlite3;但仅此而已。还有什么我应该包括的吗?

我查看了瓶子文档和其他一些地方,这要么是很明显的事情,没有人会费心写下来,要么是人们根本不做的事情......

我在看睡衣(它不断提出涉及“python”和“javascript”的搜索查询的不同组合),但它看起来只是将 python 转换为 javascript。我不认为这就是我想要的 b/c javascript 已经是 javascript...

感谢您提供的任何见解。

【问题讨论】:

    标签: javascript python bottle


    【解决方案1】:

    您需要创建一个视图来提供静态文件,如Bottle documentation 中所述。

    我建议您将所有静态文件(css、js、图像)放在应用程序旁边的 static 文件夹中。提供静态文件的视图将如下所示:

    from bottle import static_file    
    
    @route('/static/:filename:')
    def send_static(filename):
        return static_file(filename, root='./static/')
    

    然后您将像这样包含您的.js 文件(当然使用您选择的路径):

    <script type="text/javascript" src="/static/edit_area/edit_area.js"></script>
    

    【讨论】:

    • 我会补充说最好使用 Bottle 的 get_url 函数而不是硬编码路径。如果您将应用程序挂载在目录 (example.com/app) 下,指向 js 的链接将被破坏。所以最好使用src="{{ get_url('static', filename='edit_area/edit_area.js') }}"
    • 我似乎无法以这种方式工作; javascript 仍然没有正确显示。只是要清楚一点:我试图查看 localhost:8080/static/example.html 的 url 对吗?我不想只指向 JS 文件 b/c,html 具有我将要使用的设置和一些调用函数。这带来了另一个问题:我能通过这个系统接受输入吗?我在想我会在模板中放一些python代码来接受输入。如果我使用一些 JS 托管静态 html,有没有好的方法?
    • 为什么不将包含您提到的设置和函数调用的 html 代码集成到模板中?关于输入,正如我在另一个答案的 cmets 中所说,模板只是添加了逻辑的 html,如果您愿意,您仍然可以在其中放入表单。
    【解决方案2】:

    如果您使用 Bottle 中包含的名为 SimpleTemplate 的模板系统,那么它不支持多行字符串,并且模板会被编译为可执行的 Python 字节码。所以很可能任何 Javascript 都会被删除。

    在您的页面中包含 javascript 的唯一方法是通过脚本标记,就像您对“edit_area_full.js”文件所做的那样。

    【讨论】:

    • 这是有道理的,我很担心这一点,我已经开始研究其他模板,但我有点同时在看 mako、cheetah 和 jinja2,试图看看哪个一个会先给我看一些javascript,但这不起作用。您推荐哪种模板系统。同样,我不只是想展示 javascript,我想最终接受它的输入。谢谢。
    • Bottle 的模板引擎非常小,我建议使用 jinja2。无论如何,模板只是一个添加了一些逻辑的 html 文件,给定一个“上下文”,呈现为 html,您可以向其中添加 javascript 或您在 regulat html 文件中执行的任何操作,它的工作原理相同。唯一的区别是在模板中您可以使用循环或条件来构建您的 html。
    • 我不得不同意 MatToufoutu 但还要补充一点,Jinja2 也用于 Flask 框架,与 Django 自己的模板引擎非常相似,所以当你学习 Jinja2 时,你会发现这些知识在其他领域有用。
    猜你喜欢
    • 1970-01-01
    • 2013-10-21
    • 2015-10-26
    • 1970-01-01
    • 2013-10-16
    • 1970-01-01
    • 2014-04-01
    • 1970-01-01
    • 2019-11-09
    相关资源
    最近更新 更多