Django在OpenShift上添加斜线到静态文件URL

时间:2014-07-17 01:32:08

标签: django apache .htaccess python-3.x openshift

我正在尝试使用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_DIRSSTATICFILES_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.

这是我第一次尝试部署,而且我被困在这个绊脚石上。有谁知道我做错了什么?

1 个答案:

答案 0 :(得分:3)

而不是href={% static "stylesheet.css" %},请尝试"href={% static "stylesheet.css" %}"