Django 在 OpenShift 上向静态文件 URL 附加斜杠

Ben*_*ney 3 apache django .htaccess python-3.x openshift

我尝试使用 Python 3.3 卡带在 OpenShift 上部署 Django 1.6 应用程序,但遇到了静态文件问题。我在 OpenShift IRC 频道、教程/模板(例如)和之前的 StackExchange 问题(例如)方面取得了部分成功没有任何方法可以完全解决问题。

当我通过 URL 请求静态内容(例如“mydomain.com/static/stylesheet.css”或“mydomain.com/static/icons/cog.svg”)时,我可以完美地看到它们。当静态文件用作图标的 SVG 数据时,它们显示得很好。仅当链接到样式表时我才会遇到问题。我使用以下内容将 CSS 包含在我的模板中:

<link type="text/css" rel="stylesheet" href={% static "stylesheet.css" %}/>
Run Code Online (Sandbox Code Playgroud)

我已经加载了使用{% load staticfiles %}. Django(我假设它是 Django,而不是 Apache)不是在 处查看样式表,而是/static/stylesheet.css在 处查找/static/stylesheet.css/(注意尾部斜杠)。这会导致请求失败并显示 404 状态代码。当我使用其他文件扩展名(我尝试过 、 和 )或链接到 的子目录中包含的文件时,也会发生.txt同样.css.svg情况static。只有在这种情况下才会附加额外的尾部斜杠。

据我了解,如果 URL 与urls.py. 是否可以在 OpenShift 上配置 Apache,以便它直接处理对表单 URL 的所有请求/static/*.htaccess我的目录中有一个wsgi包含命令的文件

Rewrite Engine On
Rewrite Rule ^application/static/(.+)$ /static/$1 [L]
Run Code Online (Sandbox Code Playgroud)

但这并不能解决问题。我还尝试过仅对样式表以及一些内容使用重写规则Alias但也没有运气。

Django 是否应该获取这些静态文件的请求?我已确认在我的文件中DEBUG已设置该设置,但在我的文件中未提及。以下是 的相关部分:Falsesettings.pydjango.views.static.serveurls.pysettings.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')
Run Code Online (Sandbox Code Playgroud)

我没有为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.
Run Code Online (Sandbox Code Playgroud)

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

roo*_*kie 5

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