我非常困惑30分钟,但我认为我的问题必须与Django 1.3的变化有关。
我的urls.py看起来像这样:
if settings.DEBUG:
urlpatterns += patterns('',
(r'^static/(?P<path>.*)$', 'django.views.static.serve',
{'document_root': settings.STATIC_ROOT, 'show_indexes': True}),
(r'^media/(?P<path>.*)$', 'django.views.static.serve',
{'document_root': settings.MEDIA_ROOT, 'show_indexes': True}),
(r'^admin_media/(?P<path>.*)$', 'django.views.static.serve',
{'document_root': settings.ADMIN_MEDIA_ROOT}),
)
如果我访问/ static /,我会收到一个文件列表。例如,在我的根目录中有一个文件“iphone.png”。去/static/iphone.png我收到了404消息。
如果我将该部分更改为:
if settings.DEBUG:
urlpatterns += patterns('',
(r'^otherstatic/(?P<path>.*)$', 'django.views.static.serve',
{'document_root': settings.STATIC_ROOT, 'show_indexes': True}),
(r'^media/(?P<path>.*)$', 'django.views.static.serve',
{'document_root': settings.MEDIA_ROOT, 'show_indexes': True}),
(r'^admin_media/(?P<path>.*)$', 'django.views.static.serve',
{'document_root': settings.ADMIN_MEDIA_ROOT}),
)
与/ otherstatic /相关的一切都非常好。
我还应该添加/ media /或/ admin_media /.
没有问题这与Django的新静态文件应用程序有关吗? (如果是这样,谁认为完全打破这个非常简单的用例是个好主意?)
谢谢!
答案 0 :(得分:5)
在Django 1.3中,django.contrib.staticfiles
中INSTALLED_APPS
,框架将查找所有具有静态文件夹的应用程序下的所有静态文件。
Read the first point, second line carefully
以下是一个例子:
project/
yourapp/
static/
iphone.png
settings.py
假设您yourapp
中有INSTALLED_APPS
,您应该可以使用以下网址访问iphone.png
图片:
http://localhost:8000/static/iphone.png
对于您的情况,如果您希望staticfiles
应用搜索project/static/
下的文件,则需要将以下内容添加到settings.py
:
import os
SITE_ROOT = os.path.realpath(os.path.dirname(__file__))
STATICFILES_DIRS = (
os.path.join(SITE_ROOT, 'static'),
)
请注意上述情况,确保STATICFILES_DIRS
中的所有路径都与您在STATIC_ROOT
中设置的路径不匹配。后者主要用于生产。
设置static
后,您可以随意从项目urls.py
中删除STATICFILES_DIRS
行。
答案 1 :(得分:1)
除非您使用的是其他开发服务器,否则您不需要在urlconf中添加任何内容,以便在STATIC_ROOT目录中提供静态文件。
http://docs.djangoproject.com/en/dev/ref/contrib/staticfiles/#s-static-file-development-view
此视图自动启用 runserver(将DEBUG设置设置为 真正)。使用带有的视图 不同的本地开发服务器 将以下代码段添加到最后 您的主要网址配置: