2014-07-17 86 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,我設法完全錯過了之前的額外雙引號。 –