Django模板无法看到CSS文件

20

我正在构建一个Django应用程序,但无法让模板查看CSS文件...我的settings.py文件如下:

MEDIA_ROOT = os.path.join(os.path.abspath(os.path.dirname(__file__)), 'media')
MEDIA_URL = '/media/'

我的CSS文件在 /mysite/media/css/ 路径下,模板代码中包含:

<link rel="stylesheet" type="text/css" href="/media/css/site_base.css" />`

然后,在url.py文件中我有:

# DEVELOPMENT ONLY
(r'^media/(?P<path>.*)$', 'django.views.static.serve',
    {'document_root': '/media'}),

但是开发服务器提供的是没有样式的纯HTML页面。我做错了什么?

--

好的 - 根据你们所说的,我已经让它工作了。答案是:

settings.py:

MEDIA_ROOT = 'd://web//mysite//media//'  #absolute path to media
MEDIA_URL = '/mymedia/' #because admin already using /media

site_base.html:

<link rel="stylesheet" type="text/css" href="/mymedia/css/site_base.css" />

urls.py

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

瞧!它奏效了。


1
好的...感谢你帮我解决问题,但是.../media/目录下没有/mymedia/目录...那么,在href中如何引用它呢?它在哪里寻找? - yurisich
5个回答

13

在您的 urls.py 文件中的 "仅开发" 块中,您需要更改

(r'^media/(?P<path>.*)$', 'django.views.static.serve',
    {'document_root': '/media'}),

转化为...

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

5

ADMIN_MEDIA_PREFIX 默认设置为 \media\,可能会影响路径。更改该设置或使用不同的设置来处理非管理员媒体 - 例如 site_mediaassets


谢谢你,Daniel!我已经快抓狂了!这不是我第一次发现你对Django问题的回答非常有帮助,所以我想说一声大声的感谢。 - Paul

2
在开发服务器上,我喜欢作弊,在我的urls.py中添加以下内容。
if settings.DEBUG:
    urlpatterns += patterns('',
        (r'^includes/(?P<path>.*)$', 'django.views.static.serve', {'document_root': '/path/to/static/files'}),
    )

这样,项目中“/includes”文件夹下的任何内容都将由开发服务器提供。您可以将其更改为“/media”。


1

这对我也起作用了,谢谢大家!!

settings.py

MEDIA_ROOT = '/home/pi/ewspaces/ws-classic/xima/media'

MEDIA_URL = '/statics/'

urls.py

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

在模板内:

<link type="text/css" href="/statics/css/base/jquery.ui.all.css" rel="stylesheet" />

这对我也起作用了,但我想知道当我将项目部署到Web上时需要更改什么。 - d.putto

0

当我尝试让jQuery工作时,我遇到了类似的问题。我的解决方法是在我的Apache httpd.conf文件中添加一个别名,指向包含.js文件的文件夹。你也可以对你的CSS文件夹做同样的操作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接