我可以在Bottle框架中使用JavaScript吗?

3 投票
2 回答
10214 浏览
提问于 2025-04-16 22:32

我正在尝试使用Bottle这个Python的网页框架来显示一个HTML页面。这个页面里面嵌入了JavaScript,但当我用Bottle来提供这个页面时,JavaScript却没有显示出来。

我使用的JS是EditArea,我可以根据自己的需求整理它,并放到一个HTML页面中,当我在Chrome浏览器中打开这个页面时,它能正常显示。但是当我用Bottle时:

@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代码(这些代码我没有写)。

在启动服务器的文件中,我导入了:route、run、debug、template、request、send_file和error这些Bottle的功能;还有sqlite3;就这些。请问我还需要包含其他东西吗?

我查阅了Bottle的文档,还有其他一些地方,但要么是一些非常明显的东西没人写下来,要么就是人们根本不这样做……

我还看了pyjamas(我用“python”和“javascript”组合搜索时总是能找到它),但它看起来只是把Python转换成JavaScript。我觉得这不是我想要的,因为JavaScript已经是JavaScript了……

谢谢你们提供的任何见解。

2 个回答

4

你需要创建一个视图来提供静态文件,具体内容可以参考Bottle文档

我建议你把所有的静态文件(比如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>
2

如果你在使用Bottle这个框架里的模板系统,叫做SimpleTemplate,那么它不支持多行字符串,而且这些模板会被编译成可以执行的Python字节码。所以,任何JavaScript代码很可能会被去掉。

要在你的页面中包含JavaScript,唯一的方法就是像你之前那样,通过