0

更新

我弄清楚是什么导致样式表变得不可见,尽管我并不完全理解。我在 settings.py 中设置 DEBUG=False 来测试教程中描述的错误处理。以某种方式将 debug 设置为 false 会导致静态文件不可定位。我将进一步查看配置,看看我是否能清楚地理解原因。在此之前,请随时回答或评论附加信息。我仍在学习!

更新

我正在阅读这里的 DJango 教程,但遇到了障碍。我正在学习教程 3,他们解释了当我尝试加载管理站点以确保我没有破坏它时如何重构你的 urls.py 文件。果然它看起来很奇怪,因为它缺少样式表。样式表是从这里提取的:

http://127.0.0.1:8000/static/admin/css/base.css

当我在浏览器中点击该链接时,我得到了为我的应用程序配置的自定义 404 页面。样式表之前可以工作,但我不确定哪个更改破坏了它们。我浏览了我的 urls.py 文件并将所有投票特定的 url 配置还原为无济于事。这是我当前在 hellodjango 下的 urls.py (我的项目的名称。)

from django.conf.urls import patterns, include, url

# Uncomment the next two lines to enable the admin:
from django.contrib import admin
from django.http import HttpResponse

admin.autodiscover()

urlpatterns = patterns('',
    url(r'^polls/', include('polls.urls')),
    url(r'^admin/', include(admin.site.urls)),
)

def page_not_found(request, template_name='404.html'):
    return HttpResponse("Could not find the resource you asked for...")

handler404 = 'hellodjango.urls.page_not_found'

这是我的投票目录下的 urls.py:

from django.conf.urls import patterns, url

# Uncomment the next two lines to enable the admin:

urlpatterns = patterns('polls.views',
    url(r'^$', 'index'),
    url(r'^(?P<poll_id>\d+)/$', 'detail'),
    url(r'^(?P<poll_id>\d+)/results/$', 'results'),
    url(r'^(?P<poll_id>\d+)/vote/$', 'vote'),
)

帮助?

4

3 回答 3

1

看起来您没有/static. 因此,static/admin/css/base.cssURL 与任何模式都不匹配,因此您会得到 404。尝试这样的操作:

from django.conf.urls.static import static

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

这应该对您有用 - 转到/static/foo.css,您应该会看到您的 CSS。

值得注意的是,在生产环境中不鼓励这样做。但是,对于您的教程应用程序,它会起作用。

于 2012-07-04T01:50:18.757 回答
0

staticfiles 应用程序提供了一个自定义runserver管理命令,自动为静态文件提供服务,您确定您的设置中有以下内容吗?

INSTALLED_APPS = (
    # ...
    'django.contrib.staticfiles',
)

在生产中,您将使用collectstatic管理命令查找所有静态媒体并将其转储到其中STATIC_ROOT(这是此设置的唯一目的 - 在开发过程中不使用或不需要它)。

于 2012-07-04T03:43:54.750 回答
0

很高兴你想出来了。这就是它这样工作的原因。

django.contrib.staticfiles覆盖runserver管理命令,以便自动提供静态文件。为了提醒人们他们不应该使用 django 来提供静态文件,这只会在DEBUG = True您发现时发生。

覆盖管理命令的文档解释说,--insecure无论设置的状态如何,您都可以使用该标志来完成这项工作DEBUG

于 2012-07-23T23:49:08.093 回答