2014-07-17 43 views
1

我试图在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_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. 

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

回答

2

代替href={% static "stylesheet.css" %},尝试"href={% static "stylesheet.css" %}"

+0

我想你的意思'HREF = “{%静态 'stylesheet.css中' %}”',按[URL名称(https://docs.djangoproject.com /en/1.9/intro/tutorial03/#namespacing-url-names)。不过,绝对是+1,我设法完全错过了之前的额外双引号。 –