2012-05-07 19 views
9

Tôi đang cố gắng thiết lập một ứng dụng có tệp HTML mẫu và sửa đổi tệp đó trực tiếp. Nó hoạt động ở mức độ nào đó, nhưng hình ảnh và CSS trên các trang không được phân phối và có lỗi HTTP 500 trên bảng điều khiển khi chúng được yêu cầu.Các tệp tĩnh không được phân phối trên Chai bằng Python

Đây là cấu trúc thư mục của tôi

Server/ 
    assets/ 
     css/ 
      img/ 
      jquery.css 
      kickstart.css 
      zellner.css 
     js/ 
      jquery.min.js 
      kickstart.js 
     style.css 
     tb_404.png 
     tbrun1.png 
     tbservers.png 
    403.html 
    404.html 
    500.html 
    appid 
    index.html 
    maintenance.html 
    server.log 
    server.py 

Đây là cách để tôi thiết lập các định tuyến trong server.py:

@error(403) 
def error403(error): 
    return static_file("403.html") 

@error(404) 
def error404(error): 
    return static_file("404.html") 

@error(500) 
def error500(error): 
    return static_file("500.html") 

@route('assets/<filepath:path>') 
def server_static(filepath): 
    return static_file(filepath, root='assets') 

Và trong file html của tôi, các tập tin được liên kết như thế này:

<script type="text/javascript" src="assets/js/jquery.snippet.min.js"></script> 

Có thể do các số liệu thống kê nằm trong các thư mục con trong nội dung/không? Hoặc tôi đã hoàn toàn hiểu lầm làm thế nào để sử dụng static_file?

Đây là loại lỗi tôi nhận được trên Python console:

[07/May/2012 10:51:05] "GET /tempus/23 HTTP/1.1" 200 4501 <h1>Critical error while processing request: /tempus/assets/js/jquery.snippet.min.js</h1> 

Tôi không hiểu tại sao nó định tuyến đến/Tempus/tài sản/...

Bất kỳ sự giúp đỡ? Cảm ơn!

Trả lời

10

Tôi cũng gặp sự cố khi phân phát tệp tĩnh. Đây là giải pháp của tôi:

@route('/static/:filename#.*#') 
def send_static(filename): 
    return static_file(filename, root='./static/') 

và khi bạn muốn truy cập tệp tĩnh, ví dụ: tệp mẫu:

@route('/') 
def index(): 
    output = template('static/index.tpl') 
    return output 
+0

Đã lưu tôi! Câu trả lời chính xác! Cảm ơn! – Jmrapp

4

Bạn phải đặt đường dẫn đầy đủ vào tệp gốc và tùy thuộc vào nơi chương trình đang chạy. Hãy xem điều này: http://bottlepy.org/docs/dev/tutorial.html?highlight=static_file#tutorial-static-files

+5

Điều này. Đường dẫn có liên quan đến thư mục làm việc, không phải là mô-đun python là máy chủ. 'root = os.path.join (os.path.dirname (__ file__), 'static')' thực hiện thủ thuật cho tôi – Eric

1

Trình trang trí @route của bạn không chính xác cho serve_static.

Cần đọc @route ('/ assets /')

Các vấn đề liên quan