我试图在OpenShift上使用Python 3.3盒式磁带部署Django 1.6应用程序,但我遇到了静态文件的问题。我已经在OpenShift IRC频道,教程/模板(forexample)以及之前的StackExchange问题(forexample)上取得了部分成功,但没有任何结果可以完全解决问题。Django在OpenShift上将斜杠附加到静态文件URL
当我通过URL请求静态内容(例如'mydomain.com/static/stylesheet.css'或'mydomain.com/static/icons/cog.svg')时,我可以很好地看到它们。当静态文件用作图标的SVG数据时,它们显示正常。只有链接到样式表时才会遇到问题。我用下面的,包括在我的模板CSS:
<link type="text/css" rel="stylesheet" href={% static "stylesheet.css" %}/>
我已经加载的静态文件标签与{% load staticfiles %}
设置。 Django(我假设它是Django,而不是Apache)在/static/stylesheet.css/
(注意尾部斜线)寻找它,而不是在/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应该得到这些静态文件的请求吗?我已确认在我的settings.py
文件中将DEBUG
设置为False
,并且在我的urls.py
文件中未提及django.views.static.serve
。下面是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.
这是我第一次试图部署,我被困在这个绊脚石。有谁知道我做错了什么?
我想你的意思'HREF = “{%静态 'stylesheet.css中' %}”',按[URL名称(https://docs.djangoproject.com /en/1.9/intro/tutorial03/#namespacing-url-names)。不过,绝对是+1,我设法完全错过了之前的额外双引号。 –