使用开发服务器时,Django不会提供静态文件

时间:2011-07-21 23:24:02

标签: css django django-templates django-views

我刚刚为我正在开发的网站启动了一个新的开发服务器,我似乎无法让Django开发服务器为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/'

,静态文件的urls.py部分如下所示。

if settings.DEBUG:
urlpatterns += patterns('',
     (r'^media/(?P<path>.*)$', 'django.views.static.serve',         
     {'document_root': settings.MEDIA_ROOT}),
)

这是我尝试访问该页面时dev服务器的输出。

[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和其他东西的网址。

此外,没有显示数据库中的任何内容。该网站的每个页面都使用base.html和viewname.html创建。只显示base.html部分。我确信这是另一个问题的主题。

我看过很多其他帖子,人们遇到同样的问题,但没有一个提供解决方案。我完全被难倒了。

非常感谢任何帮助。感谢

4 个答案:

答案 0 :(得分:3)

您正试图通过'/ static /'而不是'/ media /'访问您的静态文件,因为您在评论中说:

"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 :(得分:3)

在Django 1.3中MEDIA_ROOTMEDIA_URL用于配置用户上传的物理位置。

对于静态文件,您应该使用 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变量访问静态文件的位置:

<link href="{{ STATIC_URL }}css/style.css" rel="stylesheet" type="text/css" />

对于开发环境/服务器而言,这应该足够了。无需在urls.py中配置任何内容。

有关详细信息,请访问官方django doc网站,说明如何管理静态文件:https://docs.djangoproject.com/en/dev/howto/static-files/

答案 2 :(得分:1)

问题必须在你的urls.py中,因为AppendSlashMiddleware - 导致重定向到以斜杠结尾的URL的原因 - 只有在URL根本不匹配时才会启动,并且从你的内容开始已经表明它应该匹配。

愚蠢的问题,但你确定DEBUG是真的吗?你能展示其余的urls.py吗?你确定这是主要的urls.py,而不是另一个包含的那个吗?

编辑好的,如果没有看到您的radio.frontend.urls文件就很难分辨,但看起来正在发生的是所有网址都与之匹配 - 因为您使用{{1包含它,它匹配所有东西,该文件中的某些内容也过于笼统。您可能想要拆分第一个urlpattern,并将之后的置于静态位。

答案 3 :(得分:1)

对于开发服务器

  1. 在django root中创建一个静态文件夹
  2. 将其添加到settings.py中的STATIC_DIRS('assets','静态文件夹的路径')
  3. 将资源放在您之前创建的静态文件夹中的相应文件夹中
  4. 然后运行python manage.py collectstatic。这将在django根目录中创建一个admin和一个assets文件夹,其中包含您放置的资产
  5. 在模板中,在顶部添加{%load static%}
  6. 对于链接使用{%static'res assets / path_to_resources_as_added_in_the_static_folder'%}
  7. 这对我有用