Django静态文件在本地开发时 - 如何绝对服务?

时间:2011-02-18 00:22:13

标签: python django django-templates

这应该是超级简单的,但不知怎的,它让我整个上午都被困住了。我正在本地开发,使用django调试服务器,并使用此文件结构:

/project/ (django project)
/static/ (static files)

在settings.py中,MEDIA_ROOT和MEDIA_URL都设置为'/ static /',我在我的urls.py中使用它

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

在我的模板中,需要作为静态目录服务器的文件配置如下:

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

这一切都可行 - javascript / css / images都是从hompage中正确提供的。但是,当我转到子目录,例如http://127.0.0.1:8000/news/时,所有链接都会被破坏。

我尝试使用各种os.import选项让它正确地做相对链接,但没有任何运气。有没有办法可以强制它相对于基本网址,或者可能将其硬编码到我的文件系统?

任何帮助都会很棒!

3 个答案:

答案 0 :(得分:1)

在urls.py文件的这一行中,'../static'应更改为绝对目录。尝试更改它,看看会发生什么。

您的档案:

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

看起来应该更像:

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

举个例子,我的设置有点不同,但我仍然使用完整路径。

以下是我的设置方式: 在settings.py

STATIC_DOC_ROOT = '/Users/kylewpppd/Projects/Django/kl2011/assets/'

urls.py

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

我正在从'localhost:8000/assets/'提供静态文件。

答案 1 :(得分:1)

我遇到了同样的问题,我通过从STATIC_URL ='/ static /'中移除第一个斜杠并使其成为STATIC_URL ='static /'就像上面的philipbe一样解决了它。 奇怪的是'/ media /'同时适用于MEDIA_URL(当'media /'打破布局时)。

无论如何 - 只需将STATIC_URL更改为等于'static /'且没有前导斜杠,您就可以解决它。

答案 2 :(得分:0)

当您转到子目录时,您的链接如何中断?你能进一步解释一下吗?

django 1.3是否支持静态媒体的某种奇怪的相对URL路由?

如果可以从主页上提供,而不是其他人提供,那么这听起来与STATIC_URL的相对位置完全不同吗?

你的STATIC_URL是什么?它应该是绝对的,并以斜线开头。