在我的应用程序中,我想使用一个css文件,但是tempalte并不“知道”文件的位置,尽管我已经在教程中对其进行了配置:
urls.py中的(网站根目录中的urls文件,不属于某个应用)
(r'^site_media/(?P<path>.*)$', 'django.views.static.serve',
{'document_root': settings.STATIC_DOC_ROOT}),
模板中的
<link href="/site_media/default.css" rel="stylesheet" type="text/css" />
在设置中:
STATIC_DOC_ROOT = '/site_media'
哪里可以错? 感谢
答案 0 :(得分:3)
检查django-annoying,它是一个非常有用的应用程序,有很多方便的装饰器,中间件和功能。如果您添加StaticServe
这样的中间件,Django将在DEBUG = True
处提供静态,而无需在urls.py中明确设置。
MIDDLEWARE_CLASSES = (
'annoying.middlewares.StaticServe',
'django.middleware.common.CommonMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.doc.XViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
)
其次,检查您的MEDIA_URL
(在您的情况下是STATIC_DOC_ROOT
,但您应该使用MEDIA_URL
)和MEDIA_ROOT
路径。 MEDIA_ROOT
应指向静态目录的绝对路径。这是我在setttings.py中的方式:
import os
def rel(*x):
return os.path.join(os.path.abspath(os.path.dirname(__file__)), *x)
# MEDIA_ROOT will point to media directory where settings.py is located
MEDIA_ROOT = rel('media')
MEDIA_URL = '/media/'
您可以使用相同的功能设置templates
目录的路径。
答案 1 :(得分:2)
document_root
的{{1}}参数需要是服务器文件系统上文件的位置,而不是URL。因此,除非您的css文件确实位于磁盘上的static.serve
目录中,这似乎不太可能,否则您需要其他内容/site_media
。