2014-02-05 1 views
0

Фон: Я пытаюсь встать на экземпляр Amazon EC2, используя сервер ubuntu. Я установил Python3.3.2, mod_wsgi-3.5, apache2, и бутылку и jinja2 для python3. Я могу получить обычную веб-страницу для загрузки с использованием всех этих компонентов, например. он распознает шаблоны jinja2 и правильно интерполирует переменные, переданные в код python, в html-файлы. Кроме того, если я изменю html в views/home.tmpl, чтобы получить <body bgcolor="#b0c4de">, тогда я получаю соответствующий цвет.Почему CSS не работает с apache2 + mod_wsgi + python3 + bottle?

Проблема: Я хочу реализовать хороший уровень абстракции (и изучать CSS в целом), поэтому я хочу, чтобы мои страницы имели внешний CSS для управления атрибутами HTML-страницы и т. Д. Но я не могу заставить вещи работайте правильно, и я не могу понять, почему.

Minimum (не) рабочий пример кода:

Моя структура каталогов:

[email protected]:/var/www/helloworld$ ls -lrtR 
.: 
-rw-rw-r-- 1 ubuntu ubuntu 162 Feb 4 23:55 adapter.wsgi 
-rwxrwxr-x 1 www-data www-data 1044 Feb 5 04:10 helloworld.py 
drwxrwxr-x 3 www-data www-data 4096 Feb 5 04:14 views 

./views: 
drwxrwxr-x 2 ubuntu ubuntu 4096 Feb 5 04:04 css 
-rw-rw-r-- 1 www-data www-data 431 Feb 5 04:14 home.tmpl 

./views/css: 
-rw-rw-r-- 1 ubuntu ubuntu 34 Feb 5 04:04 homestyle.css 

adapter.wsgi является просто оболочкой для запуска bottle.default_app():

import sys, os, bottle 
sys.path = ["/var/www/helloworld/"] + sys.path 
os.chdir(os.path.dirname(__file__)) 
import helloworld 
application = bottle.default_app() 

helloworld.py также довольно проста:

from bottle import default_app, debug, get, post, request, route, run 
from bottle import jinja2_template as template 
from bottle import jinja2_view as view 

@route("/hello") 
def hello(name=None): 
    return template('home.tmpl', name=name) 

views/home.tmpl имеет код jinja2, но короткий. обратите внимание на линию <link ...>; Я чувствую, что это то, где у меня неприятности:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"> 
<html lang="en"> 
<head> 
    <link rel="stylesheet" type="text/css" href="views/css/homestyle.css"> 
    {% block head %} 
    <title>{% block title %} {% endblock %}Jinja2-Templated Webpage!</title> 
    {% endblock %} 
</head> 
<body> 
    {% if name is string: %} 
    Hello {{ name.title() }} 
    {% else: %} 
    Hello world... 
    {% endif %} 
</body> 

и мой views/css/homestyle.css так просто, как может быть:

body {background-color: #b0c4de;} 

Я попытался переместить размещение homestyle.css быть в каталог views или в каталоге «верхнего уровня» (/var/www/helloworld); Я также пытался использовать разные ссылки в моем href=, включая абсолютный путь. Все безрезультатно, я не могу заставить этот CSS окрасить мою веб-страницу. Любая помощь очень ценится!

+0

Это похоже на дубликат http://stackoverflow.com/questions/10486224/bottle-static-files – Trent

+0

ОК, я попытаюсь просеять это и выяснить, что происходит; мне это не сразу понятно, но, возможно, мне нужно потратить (даже) больше времени на чтение документации. благодаря! – dwanderson

+0

Вы видите, apache выдает файлы - поэтому любой статический контент, вероятно, все еще должен сидеть под сервером apache. – Trent

ответ

0

Если возможно, пусть Apache обслуживает ваш файл css; не ставьте его под views. И помните, что href вашей таблицы стилей относится к URI вашей веб-страницы, а не к каталогу, в котором запускается Bottle.

Итак, если вы попали на страницу в http://myhost/hello, а затем использовать это:

<link rel="stylesheet" type="text/css" href="css/homestyle.css"> 

и положить homestyle.css в /var/www/helloworld/css/.

Надеюсь, что это поможет!