我对网络服务器还不熟悉,所以请温柔一点:
我在 Mint 系统(Ubuntu 基础,也即基于 Debian)上设置了一个新的 apache2 服务器。我还安装了 Django 后端和 wsgi_mod 扩展。我只是为了测试目的而从本地主机提供服务。
Django 管理界面 (可通过 访问localhost/admin/
) 引用其 css 文件,其相对 URL 如static/admin/base.css
。现在我在 apache 日志中看到浏览器正在尝试使用localhost/admin/static/admin/base.css
不存在的完整 URL 来获取它。
我的印象是,相对路径总是通过将其附加到基本名称而不是当前 URL 来解析。(这会导致localhost/static/admin/base.css
,即文件实际所在的位置)。
是我的想法错了(我的 Django 设置混淆了),还是我错误配置了我的 apache 服务器?以下是我在 site-enabled 文件夹中的 000-default 文件:
<VirtualHost *:80>
ServerName localhost
ServerAlias 127.0.1.1
ServerAdmin webmaster@localhost
DocumentRoot "/home/web/http/80/localhost/htdocs"
ErrorLog "/home/web/http/80/localhost/logs/error.log"
CustomLog /home/web/http/80/localhost/logs/access.log combined
LogLevel warn
WSGIScriptAlias / /home/web/http/80/localhost/lib/app.wsgi
Alias /robots.txt /home/web/http/80/localhost/htdocs/robots.txt
Alias /favicon.ico /home/web/http/80/localhost/htdocs/favicon.ico
Alias /images /home/web/http/80/localhost/htdocs/images
Alias /static /home/web/http/80/localhost/htdocs/static
<Directory /home/web/http/80/localhost/htdocs/>
AllowOverride All
Order allow,deny
allow from all
</Directory>
</VirtualHost>
我没有对 apache2.conf、ports.conf、envar 或 wsgi.conf 进行任何更改。出于测试目的,我的 .htaccess 文件也是空的。
我的 settings.py 的相关(?)部分如下所示:
STATIC_ROOT = '/home/web/http/80/localhost/htdocs/static/'
STATIC_URL = 'static/'
# Additional locations of static files
STATICFILES_DIRS = ()
ROOT_URLCONF = 'osmmap.urls'
# Python dotted path to the WSGI application used by Django's runserver.
WSGI_APPLICATION = 'osmmap.wsgi.application'
这是我的 urls.py:
from django.conf.urls import patterns, include, url
# Uncomment the next two lines to enable the admin:
from django.contrib import admin
admin.autodiscover()
urlpatterns = patterns('',
# Examples:
url(r'^test/', 'testapp.views.home'),
# Uncomment the next line to enable the admin:
url(r'^admin/', include(admin.site.urls)),
)
答案1
您希望您的静态路径与主机相关:
STATIC_URL = '/static/'
答案2
我的印象是,相对路径总是通过将其附加到基本名称而不是当前 URL 来解析。
这是对的。
(这将导致
localhost/static/admin/base.css
,这也是文件实际所在的位置)。
这是不是正确的。
相对 URL 的构造方法是从基本 URL 中删除 final 后面的所有内容/
,然后附加相对 URL。因此http://localhost/admin/
final 后面没有任何内容/
,在添加 之前也不会删除任何内容static/admin/base.css
。
因此构造的URLhttp://localhost/admin/static/admin/base.css
是正确构造的。
您需要让应用程序开发人员修复此问题。