簡體   English   中英

Django 在使用開發服務器時不會提供 static 文件

[英]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_ROOTMEDIA_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上傳/下載內容一樣。

對於開發服務器

  1. 在 django 根目錄下創建一個 static 文件夾
  2. 將此添加到 settings.py 中的 STATIC_DIRS ('assets','static 文件夾的路徑')
  3. 將資源放在您之前創建的 static 文件夾中的相應文件夾中
  4. 然后運行 python manage.py collectstatic。 這將在 django 根目錄中創建一個管理員和一個資產文件夾,其中包含您放置的資產
  5. 在模板中添加 {% load static %} 在頂部
  6. 對於鏈接使用 {% static 'assets/path_to_resources_as_added_in_the_static_folder' %}

這對我有用

問題必須在您的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM