[英]Django won't serve static files while using development server
我剛剛為我正在開發的網站啟動了一個新的開發服務器,但我似乎無法讓 Django 開發服務器為 static 文件提供 CSS 文件。 管理站點的 CSS 加載正常。 我在 virtualenv 沙箱中運行它。
在 settings.py 中,我弄亂了 MEDIA_ROOT 和 MEDIA_URL。
到目前為止,我已經嘗試過 MEDIA_ROOT。
MEDIA_ROOT = '/home/wluw/wluw/wluw/media'
和
MEDIA_ROOT = os.path.join(os.path.dirname(__file__), 'media')
我將我的 ADMIN_MEDIA_PREFIX 更改為
ADMIN_MEDIA_PREFIX = '/admin_media/'
我的 MEDIA_URL 看起來像這樣
MEDIA_URL = '/media/'
static 文件的 urls.py 部分如下所示。
if settings.DEBUG:
urlpatterns += patterns('',
(r'^media/(?P<path>.*)$', 'django.views.static.serve',
{'document_root': settings.MEDIA_ROOT}),
)
這是我嘗試訪問該頁面時來自開發服務器的 output。
[21/Jul/2011 21:19:25] "GET /media/css/style.css HTTP/1.1" 302 0
[21/Jul/2011 21:19:25] "GET /media/css/style.css/ HTTP/1.1" 404 2561
from django.conf.urls.defaults import patterns, include, handler500, handler404
from django.conf import settings
from django.contrib import admin
import d51_django_admin_piston
handler500 = 'radio.frontend.views.server_error'
admin.autodiscover()
d51_django_admin_piston.autodiscover(admin.site)
urlpatterns = patterns(
'',
(r'^logs/', include('radio.logs.urls')),
(r'^events/', include('radio.events.urls')),
(r'^station/', include('radio.station.urls')),
(r'^staff/', include('radio.staff.urls')),
(r'^admin/', include(admin.site.urls)),
(r'^accounts/login/$', 'django.contrib.auth.views.login'),
(r'^', include('radio.frontend.urls')),
)
if settings.DEBUG:
urlpatterns += patterns('',
(r'^media/(?P<path>.*)$', 'django.views.static.serve',
# {'document_root': settings.MEDIA_ROOT}),
{'document_root': settings.MEDIA_ROOT, 'show_indexes': True})
)
這是我的 radio.frontend.urls
from django.conf.urls.defaults import *
urlpatterns = patterns('radio.frontend.views',
url(r'^$', 'home', name='home'),
)
這是我的 settings.py settings.py
在具有 /media 的生產服務器上一切正常嗎? 是 css 和其他東西的 url。
也沒有顯示數據庫中的任何內容。 該站點的每個頁面都使用 base.html 和 viewname.html 創建。 只有 base.html 部分出現。 我確信這是另一個問題的主題。
我看過很多其他有同樣問題的人的帖子,但沒有一個提供解決方案。 我完全被難住了。
任何幫助將不勝感激。 謝謝
在 Django 1.3 MEDIA_ROOT
和MEDIA_URL
用於配置用戶上傳的物理位置。
對於 static 文件,您應該使用STATIC_URL :
STATIC_URL = '/static/' # URL prefix for static files.
和STATICFILES_DIRS :
PROJECT_DIR = os.path.dirname(__file__)
# Additional locations of static files
STATICFILES_DIRS = (
# Put strings here, like "/home/html/static" or "C:/www/django/static".
# Always use forward slashes, even on Windows.
# Don't forget to use absolute paths, not relative paths.
os.path.join(PROJECT_DIR, 'static'),
)
還要確保您已配置STATICFILES_FINDERS
。
STATICFILES_FINDERS = (
'django.contrib.staticfiles.finders.FileSystemFinder',
'django.contrib.staticfiles.finders.AppDirectoriesFinder',
)
在您的模板中,您可以使用 STATIC_URL 變量來訪問 static 文件的位置:
<link href="{{ STATIC_URL }}css/style.css" rel="stylesheet" type="text/css" />
對於開發環境/服務器來說,這應該足夠了。 無需在 urls.py 中配置任何內容。
有關更多信息,您可以訪問官方 django 文檔站點,描述如何管理 static 文件: https://docs.djangoproject.com/en/dev/howto/static-file
您正在嘗試通過“/static/”而不是“/media/”訪問您的 static 文件,因為您在評論中說:
"GET /static/css/style.css HTTP/1.1" 302 0 [21/Jul/2011 21:13:31] "GET /static/css/style.css/ HTTP/1.1" 404
您可以通過這種方式訪問它:
"GET /media/css/style.css HTTP/1.1" 302 0 [21/Jul/2011 21:13:31] "GET /media/css/style.css/ HTTP/1.1" 404
你在你的模板中相應地設置了 URL 。
或者,您以這種方式設置路由:
if settings.DEBUG:
urlpatterns += patterns('',
(r'^static/(?P<path>.*)$', 'django.views.static.serve',
# {'document_root': settings.MEDIA_ROOT}),
{'document_root': settings.MEDIA_ROOT, 'show_indexes': True})
)
我將選擇第二個並設置settings.STATIC_FILE
,就像您通常使用MEDIA_ROOT
上傳/下載內容一樣。
對於開發服務器
這對我有用
問題必須在您的urls.py
中,因為 AppendSlashMiddleware - 這是導致重定向到以斜杠結尾的 URL 的原因 - 只有在 URL 根本不匹配時才會出現,並且從您所顯示的內容來看匹配。
愚蠢的問題,但你確定DEBUG
是真的嗎? 你能顯示 urls.py 的 rest 嗎? 您確定這是主要的 urls.py,而不是另一個包含的嗎?
編輯好的,如果沒有看到你的radio.frontend.urls
文件就很難判斷,但看起來正在發生的事情是所有的 URL 都與之匹配 - 因為你使用r'^'
來包含它,它匹配所有東西,aomething在那個文件中也太籠統了。 您可能想要分解第一個 urlpattern,並將包含放在 static 位之后。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.