使用CSS的Django MEDIA_URL和MEDIA_ROOT问题

时间:2013-07-23 17:57:50

标签: css django django-templates django-urls

我遇到了与this question非常相似的问题,但遗憾的是,似乎没有一个解决方案适合我。

基本上我有以下非常简单的目录:

ulogin
 - models.py
 - tests.py
 - views.py
 - media 
   - screen.css
 - templates
   - utemplate
     - index.html

在我的settings.py我定义了以下内容:

MEDIA_ROOT = '../compwebsite/ucode/ulogin/media'
MEDIA_URL = '/media/'

并在index.html我有以下内容尝试引用screen.css

<html>
<head> 
    <title>
        YAY TITLE
    </title>
    <link rel="stylesheet" href="{{ MEDIA_URL }}screen.css">
<!--and it more...-->

我的urls.py我有以下内容:

from django.conf.urls import patterns, include, url
from django.conf import settings
from django.conf.urls.static import static

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

无论我做什么,我都无法获得screen.css的引用。我真的不确定如何根据网站上的其他问题解决这个问题。非常感谢你,如果你需要更多信息,请告诉我!

1 个答案:

答案 0 :(得分:1)

静态文件应放在'static'目录中;这就是Django的样子。 'media'目录用于保存用户上传的文件,当django服务器运行时,这些文件将被复制到静态目录中。

MEDIA_URL引用更改为STATIC_URL

您根本不必使用URLConf来管理静态文件。

对于您的Django设置,如果更改绝对路径(即推送到部署服务器时),则硬编码绝对路径并不是一个好主意。

更好的想法是做这样的事情:

from os import path

PROJECT_ROOT = path.abspath(path.dirname(path.dirname(__file__)))

MEDIA_ROOT = path.join(PROJECT_ROOT, 'media/')

MEDIA_URL = ''

STATIC_ROOT = ''

STATIC_URL = '/static/'

STATICFILES_DIRS = (
    path.join(PROJECT_ROOT, 'static/'),
)

这将确保Django使用正确的绝对路径,无论您的项目在系统中的哪个位置。

您也可以在STATICFILES_FINDERS中启用DefaultStoreFinder,尽管它不是必需的。