我試圖在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,我設法完全錯過了之前的額外雙引號。 –