Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 瓶子静态文件_Python_Python 2.7_Bottle - Fatal编程技术网

Python 瓶子静态文件

Python 瓶子静态文件,python,python-2.7,bottle,Python,Python 2.7,Bottle,我已经试过阅读瓶子的文档,但是,我仍然不确定静态文件服务是如何工作的。我有一个index.tpl文件,其中附加了一个css文件,可以正常工作。然而,我读到瓶子不会自动提供css文件,如果页面加载正确,这是不可能的 但是,我在请求页面时遇到了速度问题。这是因为我没有使用返回静态文件(参数转到这里)?如果有人能弄清楚它们是如何工作的,以及加载页面时如何使用它们,那就太好了 服务器代码: from Bottle import route,run,template,request,static_file

我已经试过阅读瓶子的文档,但是,我仍然不确定静态文件服务是如何工作的。我有一个
index.tpl
文件,其中附加了一个css文件,可以正常工作。然而,我读到瓶子不会自动提供css文件,如果页面加载正确,这是不可能的

但是,我在请求页面时遇到了速度问题。这是因为我没有使用
返回静态文件(参数转到这里)
?如果有人能弄清楚它们是如何工作的,以及加载页面时如何使用它们,那就太好了

服务器代码:

from Bottle import route,run,template,request,static_file



@route('/')
def home():
    return template('Templates/index',name=request.environ.get('REMOTE_ADDR'))

run(host='Work-PC',port=9999,debug=True)
索引:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
  <meta http-equiv="content-type"
 content="text/html; charset=ISO-8859-1">
  <title>index</title>
  <link type="text/css"
 href="cssfiles/mainpagecss.css"
 rel="stylesheet">
</head>
<body>
<table
 style="width: 100%; text-align: left; margin-left: auto; margin-right: auto;"
 border="0" cellpadding="2" cellspacing="2">
  <tbody>
    <tr>
      <td>
      <h1><span class="headertext">
      <center>Network
Website</center>
      </span></h1>
      </td>
    </tr>
  </tbody>
</table>
%if name!='none':
    <p align="right">signed in as: {{name}}</p>
%else:
    pass
%end
<br>
<table style="text-align: left; width: 100%;" border="0" cellpadding="2"
 cellspacing="2">
  <tbody>
    <tr>
      <td>
      <table style="text-align: left; width: 100%;" border="0"
 cellpadding="2" cellspacing="2">
        <tbody>
          <tr>
            <td style="width: 15%; vertical-align: top;">
            <table style="text-align: left; width: 100%;" border="1"
 cellpadding="2" cellspacing="2">
              <tbody>
                <tr>
                  <td>Home<br>
                  <span class="important">Teamspeak Download</span><br>
                  <span class="important">Teamspeak Information</span></td>
                </tr>
              </tbody>
            </table>
            </td>
            <td style="vertical-align: top;">
            <table style="text-align: left; width: 100%;" border="1"
 cellpadding="2" cellspacing="2">
              <tbody>
                <tr>
                  <td>
                  <h1><span style="font-weight: bold;">Network Website</span></h1>
To find all of the needed information relating to the network's social
capabilities, please refer to the links in the side bar.</td>
                </tr>
              </tbody>
            </table>
            </td>
          </tr>
        </tbody>
      </table>
      </td>
    </tr>
  </tbody>
</table>
</body>
</html>

指数
网络
网站
%如果名称!='“没有”:

以以下身份登录:{{name}

%其他: 通过 %结束
主页
Teamspeak下载
Teamspeak信息 网络网站 查找与网络社交网络相关的所有必要信息 功能,请参考侧栏中的链接。
如文档所示,您应该使用static函数提供静态文件,css是一个静态文件。静态函数处理安全性和其他一些可以从源代码中找到的函数。静态函数的path参数应该指向存储css文件的目录

要使用
瓶子
提供静态文件,您需要使用提供的
静态文件
函数并添加一些额外的路由。以下路由引导静态文件请求,并确保仅访问具有正确文件扩展名的文件

from bottle import get, static_file

# Static Routes
@get("/static/css/<filepath:re:.*\.css>")
def css(filepath):
    return static_file(filepath, root="static/css")

@get("/static/font/<filepath:re:.*\.(eot|otf|svg|ttf|woff|woff2?)>")
def font(filepath):
    return static_file(filepath, root="static/font")

@get("/static/img/<filepath:re:.*\.(jpg|png|gif|ico|svg)>")
def img(filepath):
    return static_file(filepath, root="static/img")

@get("/static/js/<filepath:re:.*\.js>")
def js(filepath):
    return static_file(filepath, root="static/js")

我过去使用过Sanketh的模板,但随着时间的推移,它浓缩成了一个扩展不可知函数。您只需在ext_map dictionary中添加扩展文件夹映射。如果扩展未显式映射,则默认为static/folder

import os.path    

# Static Routes
@get('/<filename>')
def serve_static_file(filename):
    ext = os.path.splitext(filename)[1][1:]
    ext_map = {'image':['png','gif','jpg','ico'],'js':['js']}
    sub_folder = next((k for k, v in ext_map.items() if ext in v),'')
    return static_file(filename, root='static/'+sub_folder)
导入操作系统路径
#静态路由
@获取(“/”)
def SERVER_静态_文件(文件名):
ext=os.path.splitext(文件名)[1][1:]
ext_map={'image':['png'、'gif'、'jpg'、'ico']、'js':['js']}
sub_folder=next((k代表k,v在ext_map.items()中,如果ext在v中),“”)
返回静态文件(文件名,root='static/'+子文件夹)

与Sanketh的回答中使用正则表达式匹配为文件提供服务不同,我不希望修改模板并显式提供静态文件的路径,如:

<script src="{{ get_url('static', filename='js/bootstrap.min.js') }}"></script>

:路径以非贪婪的方式匹配整个文件路径,这样您就不必担心在切换到生产环境时更改模板-只要将所有内容保持在相同的相对文件夹结构中即可。

这里只是提供一个答案,因为我的许多学生在作业中使用了此代码,我对此有点怀疑关注解决方案

在瓶子中提供静态文件的标准方法是:

从瓶子导入静态文件
@路由(“/static/”)
def服务器_静态(文件路径):
返回静态_文件(filepath,root='/path/to/your/static/files')
这样,静态文件夹下的所有文件都从以/static开头的URL提供。在HTML中,您需要引用资源的完整URL路径,例如:

Sanketh的回答是,URL空间中任何地方对图像、css文件等的任何引用都是从静态文件夹中的给定文件夹提供的。因此/foo/bar/baz/picture.jpg和/picture.jpg都将从static/images/picture.jpg提供。这意味着您不必担心在HTML代码中获得正确的路径,您可以始终使用相对文件名(即just src=“picture.jpg”)

当您尝试部署应用程序时,这种方法会出现问题。在生产环境中,您希望静态资源由像nginx这样的web服务器服务,而不是由应用程序服务。为了实现这一点,它们都应该从URL空间的单个部分提供服务,例如/static。如果您的代码中充斥着相关的文件名,那么它将很难转换为这个模型


因此,我建议使用瓶子教程中的三行解决方案,而不是本页列出的更复杂的解决方案。它的代码更简单(因此不太可能出现错误),并且允许您无缝地迁移到生产环境,而无需更改代码

我对瓶子不太了解,但说它不提供静态文件的说法可能只适用于生产模式,而不适用于开发。让您的Apache或您正在使用的任何东西服务于静态文件通常会更有效。顺便说一下。。。HTML中的表太多;)那么我应该如何设置它来使用我的模板呢?或者这只是在部署到生产服务器而不是开发服务器时发生的?瓶子有一个名为TEMPLATE_PATH的变量,它是瓶子搜索模板的路径列表。选中瓶子.py源文件中的第2839行。您可以使用其中一个默认路径,也可以将您正在使用的路径添加到该列表中。因此,如果我将模板路径添加到该变量中,请使用
返回静态文件(pathtomycss)
我应该这样做吗?如果没有,你能给我举个例子吗?对于所有这些问题,我很抱歉,我只是从web developing x.xNo.开始。您可以将html模板文件的路径添加到模板路径中,但是css文件通常包含在不同的文件夹中。您将该文件夹的路径传递给static_file函数。那么我有两个返回函数?模板和静态文件?包含
#静态路由的模块的名称是什么<
import os.path    

# Static Routes
@get('/<filename>')
def serve_static_file(filename):
    ext = os.path.splitext(filename)[1][1:]
    ext_map = {'image':['png','gif','jpg','ico'],'js':['js']}
    sub_folder = next((k for k, v in ext_map.items() if ext in v),'')
    return static_file(filename, root='static/'+sub_folder)
<script src="{{ get_url('static', filename='js/bootstrap.min.js') }}"></script>
@app.route('/static/<filename:path>', name='static')
def serve_static(filename):
    return static_file(filename, root=config.STATIC_PATH)
from bottle import static_file
@route('/static/<filepath:path>')
def server_static(filepath):
    return static_file(filepath, root='/path/to/your/static/files')