我遇到了与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
的引用。我真的不确定如何根据网站上的其他问题解决这个问题。非常感谢你,如果你需要更多信息,请告诉我!
答案 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,尽管它不是必需的。