Django静态文件再次无法工作

1 投票
1 回答
1670 浏览
提问于 2025-04-16 18:13

我知道这个问题已经被问过很多次了,其实我也不是新手 Django 开发者,但最近我在 Django 项目中遇到了很大的麻烦,静态文件一直无法正常工作。上次我用的是 1.3 版本解决了这个问题,但这次我在用 1.2.5 版本,结果没有任何解决办法有效。

简单来说,我的静态文件只在管理后台能正常显示,网站的其他地方都不行。静态文件放在 K:/project/media 这个位置,我用的是 Windows 系统,Python 2.7 和 Django 1.2.5,运行的是开发服务器。

设置:

MEDIA_ROOT = path.join(path.abspath(path.dirname(__file__)), 'media')
MEDIA_URL = '/static/'
ADMIN_MEDIA_PREFIX = '/admin_media/'

URL 配置:

urlpatterns += patterns('',
    (r'^static/(?P<path>.*)$', 'django.views.static.serve',
        {'document_root': 'K:/project/media/', 'show_indexes': True}
    ),
)

现在,当我打开 http://127.0.0.1:8000/static/ 时,看到的不是静态文件列表,而是出现了 TemplateDoesNotExist at /static/ 的错误。而在模板中引入静态文件时也返回类似的错误,而不是 404:TemplateDoesNotExist at /static/css/global.css/。我到底漏掉了什么呢?

编辑

完整的 URL 配置

from django.conf.urls.defaults import *
from django.views.generic.simple import redirect_to
from p.globals import views
from p.newsevents.feeds import ReleaseFeed
import filebrowser

# Uncomment the next two lines to enable the admin:
from django.contrib import admin
admin.autodiscover()

feeds = {
    'releases': ReleaseFeed,
}

urlpatterns = patterns('',

    (r'(?P<reqPath>[\w\-,.]+)$', redirect_to, {'url': '%(reqPath)s/'}),

    (r'^admin/filebrowser/', include('filebrowser.urls')),
    #(r'^admin$', redirect_to, {'url': '/admin/'}),
    (r'^admin/', include(admin.site.urls)),
    (r'^tinymce/', include('tinymce.urls')),
    #(r'^about-us/$', redirect_to, {'url': '/about-us/our-story/'}),
    (r'^feeds/(?P<url>.*)/$', 'django.contrib.syndication.views.feed', {'feed_dict': feeds}),
    (r'^get-your-look/', include('p.getyourlook.urls')),
    (r'^about-us/', include('p.aboutus.urls')),
    (r'^our-services/', include('p.services.urls')),
    (r'^news-events/', include('p.newsevents.urls')),
    (r'^promotions/', include('p.promotions.urls')),
    (r'^careers/', include('p.careers.urls')),
    (r'^locations/', include('p.locations.urls')),

    (r'^$', views.home),
    (r'^(?P<reqPath>[\w\-,.]+)/', views.globals_views),
)

from django.conf import settings

urlpatterns += patterns('',
    (r'^static/(?P<path>.*)$', 'django.views.static.serve',
        {'document_root': 'K:/Kuba/Webdesign/hair/media/', 'show_indexes': True}
    ),
)

1 个回答

1

我想这可能是因为这个原因:

 (r'^(?P<reqPath>[\w\-,.]+)/', views.globals_views),

它会拦截所有对静态文件的请求,然后调用那个视图,这样就会导致出现“模板不存在”的错误。你可以在这个之前放一个静态链接,或者修改这个(以及它所指向的链接)正则表达式。

撰写回答