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

4 投票
3 回答
1723 浏览
提问于 2025-04-16 12:02

这件事应该很简单,但我今天早上一直卡在这里。我在本地开发,使用的是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和图片都能正确加载。但是,当我访问一个子目录,比如http://127.0.0.1:8000/news/时,所有的链接都坏掉了。

我尝试了各种os.import选项,希望能让它正确处理相对链接,但都没有成功。有没有办法强制它相对于基础网址,或者直接写死在我的文件系统中呢?

任何帮助都太棒了!

3 个回答

0

当你进入一个子目录时,你的链接是怎么坏掉的?能不能再详细解释一下?

django 1.3支持某种奇怪的相对网址路由来处理静态媒体吗?

如果它可以从主页提供,但在其他地方不行,这是不是听起来像你的 STATIC_URL 是一个相对位置?

你的 STATIC_URL 是什么?它应该是绝对路径,并且以斜杠开头。

1

我刚遇到同样的问题,解决方法是把STATIC_URL='/static/'里的第一个斜杠去掉,改成STATIC_URL = 'static/',就像philipbe上面写的那样。奇怪的是,'/media/'在MEDIA_URL里用得很好(而'media/'会导致布局出问题)。

总之,只需要把STATIC_URL改成'static/',不要前面加斜杠,这样就能解决问题了。

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/'上提供我的静态文件。

撰写回答