【问题标题】:Why isn't CSS working with apache2+mod_wsgi+python3+bottle?为什么 CSS 不能与 apache2+mod_wsgi+python3+bottle 一起使用?
【发布时间】:2014-02-07 11:54:16
【问题描述】:

背景:我正在尝试使用 ubuntu 服务器建立一个 Amazon EC2 实例。我已经为 python3 安装了 Python3.3.2、mod_wsgi-3.5、apache2、bottle 和 jinja2。我可以使用所有这些组件来加载常规网页,例如它识别 jinja2 模板,并将在 python 代码中传递的变量正确插入到 html 文件中。此外,如果我将views/home.tmpl 中的html 更改为<body bgcolor="#b0c4de">,那么我会得到适当的颜色。

问题:我想实现一个好的抽象级别(并学习一般的 CSS),所以我希望我的页面有一个外部 CSS 来管理 HTML 页面属性等。但我无法让事情正常工作正确,我似乎无法弄清楚为什么。

代码的最小(非)工作示例:

我的目录结构是:

ubuntu@ip-172-31-47-7:/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 为我的网页着色。任何帮助是极大的赞赏!

【问题讨论】:

  • 好的,我会试着筛选一下,弄清楚发生了什么;我还不是很清楚,但也许我需要花(甚至)更多时间阅读文档。谢谢!
  • 你看,apache 正在分发文件 - 所以任何静态内容可能仍然位于 apache 服务器下。

标签: html css jinja2 python-3.3 bottle


【解决方案1】:

如果可能,让 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/

希望有帮助!

【讨论】:

    猜你喜欢
    • 2016-05-18
    • 1970-01-01
    • 1970-01-01
    • 2021-04-09
    • 2019-08-25
    • 2011-12-22
    • 2020-03-14
    • 1970-01-01
    相关资源
    最近更新 更多