我正在尝试使用Python 3.3盒式磁带在OpenShift上部署Django 1.6应用程序,但我遇到了静态文件的问题。我在OpenShift IRC频道,教程/模板(for example)以及之前的StackExchange问题(for example)方面取得了部分成功,但没有任何内容完全解决问题
当我通过网址请求静态内容时(例如&m ;; mydomain.com/static/stylesheet.css'或者&mdomain.com/static/icons/cog.svg')我可以很好地看到它们。当静态文件用作图标的SVG数据时,它们显示正常。只有在链接到样式表时才会遇到问题。我使用以下内容在我的模板中包含CSS:
<link type="text/css" rel="stylesheet" href={% static "stylesheet.css" %}/>
我已使用{% load staticfiles %}
加载了静态文件标记集。不是在/static/stylesheet.css
看到样式表,Django(我认为它是Django,而不是Apache)在/static/stylesheet.css/
查找它(注意斜杠)。这会导致请求失败并显示404状态代码。当我使用其他文件扩展名(我已尝试.txt
,.css
和.svg
)或链接到static
子目录中包含的文件时,会发生同样的情况。只有在这种情况下才会附加额外的尾部斜杠。
据我所知,如果URL与urls.py
中定义的任何模式都不匹配,Django会在URL中附加一个尾部斜杠。是否可以在OpenShift上配置Apache,以便它直接处理对/static/*
格式的URL的所有请求?我在.htaccess
目录中有一个wsgi
文件,其中包含命令
Rewrite Engine On
Rewrite Rule ^application/static/(.+)$ /static/$1 [L]
但这并没有解决问题。我还尝试仅使用样式表的重写规则以及Alias
的一些内容,但也没有运气。
Django应该收到这些静态文件的请求吗?我已确认DEBUG
文件中的False
被设置为settings.py
,并且在我的django.views.static.serve
文件中未提及urls.py
。以下是settings.py
的相关部分:
STATIC_URL = '/static/'
if 'OPENSHIFT_REPO_DIR' in os.environ:
STATIC_ROOT = os.path.join(os.environ.get('OPENSHIFT_REPO_DIR'),
'wsgi', 'static')
else:
STATIC_ROOT = os.path.join(PROJECT_ROOT, 'static')
我没有为STATICFILES_DIRS
或STATICFILES_FINDERS
设置值,因为目前我只处理在STATIC_ROOT
找到的静态文件。 OpenShift项目看起来像
~/app-root/runtime/repo/wsgi/
.htaccess
application
openshift/
settings.py
manage.py
#And so on.
static/
stylesheet.css
icons/
cog.svg
#More icons here.
这是我第一次尝试部署,而且我被困在这个绊脚石上。有谁知道我做错了什么?
答案 0 :(得分:3)
而不是href={% static "stylesheet.css" %}
,请尝试"href={% static "stylesheet.css" %}"