当前位置: 首页 > 面试题库 >

如何将JavaScript或CSS文件加载到BottlePy模板中?

朱天逸
2023-03-14
问题内容

我试图用BottlePy返回一个html模板。这很好。但是,如果我在tpl文件中插入这样的javascript文件:

<script type="text/javascript" src="js/main.js" charset="utf-8"></script>

我收到404错误。 (无法加载资源:服务器响应状态为404(未找到))

有谁知道如何解决这个问题?

这是我的脚本文件:

from bottle import route, run, view

@route('/')
@view('index')
def index():
    return dict()
run(host='localhost', port=8080)

那就是模板文件,位于“ ./views”子文件夹中。

<!DOCTYPE html>
<html lang="de">
    <head>
        <meta charset="utf-8" />
        <script type="text/javascript" src="js/main.js" charset="utf-8"></script>
    </head>
    <body>
    </body>
</html>

也许是开发服务器在其中查找我的js文件的“ rootPath / js / main.js”?

文件的结构为:

app.py
-js
 main.js
-views
 index.tpl

谢谢。


问题答案:

好吧,首先,您需要实际使用dev服务器main.js,否则浏览器将无法使用它。

通常将所有文件.js.css文件static放在小型Web应用程序的目录下,因此布局应如下所示:

  app.py
- static/
    main.js
- views/
    index.tpl

绝不需要这种确切的命名和布局,而只是经常使用。

接下来,您应该为静态文件提供处理程序:

from bottle import static_file

# ...

@route('/static/:path#.+#', name='static')
def static(path):
    return static_file(path, root='static')

这实际上会将您的文件提供static/给浏览器。

现在,到最后一件事。您将JavaScript指定为:

<script type="text/javascript" src="js/main.js" charset="utf-8"></script>

这意味着到的路径.js
对于当前页面的。在你开发服务器,索引页(/)将寻找.js/js/main.js和另一页(说,/post/12)将寻找它/post/12/js/main.js,并且将肯定失败。

相反,您需要使用该get_url函数正确引用静态文件。您的处理程序应如下所示:

from Bottle import get_url

# ...

@route('/')
@view('index')
def index():
    return { 'get_url': get_url }

在中index.tpl.js应引用为:

<script type="text/javascript" src="{{ get_url('static', path='main.js') }}" charset="utf-8"></script>

get_url用找到一个处理程序name='static',并计算到它的正确路径。对于开发服务器,它将始终为/static/。您甚至可以在模板中对其进行硬编码,但是由于两个原因,我不建议这样做:

  • 您将无法在根目录下将应用程序挂载到生产环境中;也就是说,当你把它上传到服务器大生产,它可以被划归http://example.com/(根),但不低于http://example.com/myapp/。
  • 如果更改/static/目录位置,则必须在整个模板中进行搜索,然后在每个模板中进行修改。


 类似资料:
  • 问题内容: 我使用以下代码将模板包括到我的主文件中。 我的 activity.html 像这样, 但是javascript并没有随模板一起加载 。 我在SO中发现了一些与此问题相关的问题,但找不到有效的解决方案。答案之一是在主文件中的angularjs上方加载jquery,以便脚本标记将被接受。但没有发现它起作用。 问题答案: 我在ng-include里面的加载脚本中找到了这个答案,不幸的是那里没

  • 问题内容: 是否可以使用Javascript将CSS样式表导入html页面?如果是这样,怎么办? 附言:JavaScript将托管在我的网站上,但我希望用户能够放入其网站的标签,并且它应该能够将托管在我的服务器上的CSS文件导入当前网页。(css文件和javascript文件都将托管在我的服务器上)。 问题答案: 这是这样做的“老派”方法,希望可以在所有浏览器上使用。从理论上讲,不幸的是,您将使用

  • 我想加载(要求)一个包含json模式的文件夹,这些模式具有基于其文件的引用。 换句话说,我有 并在同一文件夹中的另一个文件中: 这些模式在sperate文件中,现在应该加载到JS中,以便针对json对象进行验证。但是,文件夹内的引用应该仍然有效。 这就是为什么我的问题是,是否以及如何能够加载一个装满json文件的文件夹,而不需要中断引用。 这个库将使用这些模式来验证json对象:https://g

  • 问题内容: 在elasticsearch v1.5中,可以将Index模板放在模板目录下的配置位置(path.conf)中。但是,我发现升级到v2.3或v5.3后将不会加载此模板。有什么办法加载索引模板吗? https://www.elastic.co/guide/zh-CN/elasticsearch/reference/1.5/indices- templates.html 问题答案: 在2.

  • 问题内容: 首先,我知道这行不通。我已经尝试过Ajax和其他方法,但是Google具有安全性,所以我不能。如何在JavaScript(不是PHP)中加载 本地 文件?不,我不是要窃取人们的数据。 或者,如果这些都不起作用,是否有可能在不进行复杂服务器设置的情况下将数据从命令提示符传递到HTML / JavaScript文件/页面?(命令提示符读取文件,并将其提供给HTML)。 我 不是在 试图做:

  • 问题内容: 我正在使用Selenium WebDriver尝试将外部javascript文件插入DOM中,而不是将整个内容键入到executeScript中。 看起来好像已将节点正确放置到DOM中,但是随后它只是忽略了源代码,即,所述源js文件上的函数未运行。 这是我的代码: 我链接到的javascript文件的代码是 我已将js文件放在本地主机上,使用file:///进行了调用,并在外部服务器上