Django管理员不提供静态文件?

all*_*rry 6 python django static admin

Django 1.6

我在为Django Admin提供静态文件时遇到问题.

urls.py:

urlpatterns = patterns('',
    url(r'^$', 'collection.views.index', name='home'),
    url(r'^collection/', include('collection.urls')),
    url(r'^admin/',    include(admin.site.urls)),
)

if settings.DEBUG:
    urlpatterns += patterns('',
        url(r'^media/(?P<path>.*)$', 'django.views.static.serve', {
            'document_root': settings.MEDIA_ROOT,
        }),
        url(r'^static/(?P<path>.*)$', 'django.views.static.serve', {
            'document_root': settings.STATIC_ROOT,
        }),
)
Run Code Online (Sandbox Code Playgroud)

settings.py

...
MEDIA_ROOT = '/Users/me/projectdir/media/'
MEDIA_URL = 'media/'

STATIC_ROOT = '/Users/me/projectdir/static/'
STATIC_URL = 'static/'
...
Run Code Online (Sandbox Code Playgroud)

模板(base.html)

<!DOCTYPE html>
<html lang='en-us'>
<head>
<title>Mysite</title>

{% load static %}
{% block links %}
    <link href="{% static 'css/bootswatch-simplex.css' %}" rel="stylesheet" type="text/css">
    <link href="{% static 'css/custom.css' %}" rel="stylesheet" type="text/css">
    <link rel="shortcut icon" href="{% static "favicon.ico" %}">
{% endblock %}

<script src="{% static "lib/bootstrap-3.1.1-dist/js/bootstrap.js" %}"></script>
<script type="text/javascript">window.__admin_media_prefix__ = "{% filter escapejs %}{% static "admin/" %}{% endfilter %}";</script>
</head>
...
Run Code Online (Sandbox Code Playgroud)

Django正在为我的管理员提供服务,没有静态文件:CSS,JS等.

面向公众的页面的静态文件工作正常.

如果我STATIC_URL改为'/static/',则情况恰恰相反:管理员很好,但我的公共页面丢失了他们的静态文件.

这是最奇怪的部分.如果我在浏览器中"查看"管理页面的来源,它会显示静态页面的正确URL,例如:

/static/admin/css/base.css
Run Code Online (Sandbox Code Playgroud)

但如果我真的按照链接,它会将其更改为:

http://localhost:8000/admin/static/admin/css/base.css
Run Code Online (Sandbox Code Playgroud)

我认为它正在检查静态文件localhost:8000/admin/static/而不仅仅是localhost:8000/static/.它admin为网址添加了额外的" "级别,就像static域的一部分一样.我只是无法弄清楚如何摆脱它.

我试过了collectstatic,但没有用.静态文件位于我的静态目录中,它们只是没有被提供.我可以输入,比方说,http://localhost:8000/static/admin/css/base.css我得到了正确的CSS文件(用纯文本).文件在那里.我打赌我的配置有问题.

我已经清空了我的缓存,重新启动了我的开发服务器等等.没有豆子.

想法?

rud*_*dra 6

使用django-admin.py collectstatic或转到~/django/contrib/admin/static并复制admin文件夹(包含静态文件)并将其粘贴到项目的静态目录中.

**编辑**

您可以尝试的绝望或笨拙的解决方案:将您的STATIC_URL更改为'/ static /',从我看到的问题:

如果我将STATIC_URL更改为'/ static /',则情况恰恰相反:管理员很好,但我的公共页面丢失了他们的静态文件.

然后查看inspect element/firebug,查看公共页面中提供的网址.可能是'/'缺失或添加'/'.调整它,看它是否有效.


all*_*rry 5

好,我知道了。就我而言,这个问题与上面讨论的所有细节都没有关系。而是,我的设置文件中有些混乱,并且我没有STATICFILES_DIRS正确设置。

最后,我在Django 1.6的《两勺》中实现了版本控制的设置文件,其中包括settings

from unipath import Path

BASE_DIR         =  Path(__file__).ancestor(3)
MEDIA_ROOT       =  BASE_DIR.child('media')
STATIC_ROOT      =  BASE_DIR.child('static')

TEMPLATE_DIRS    = (
    BASE_DIR.child('templates'),
)

STATICFILES_DIRS = (
    BASE_DIR.child('myapp').child('static'),
)

STATIC_URL         = '/static/'
MEDIA_URL          = '/media/'
Run Code Online (Sandbox Code Playgroud)

有了这个,我的静态文件就可以在admin和不包含admin的情况下正确提供了。另一方面urls.py,根据此处公认的答案,如果不更改我的开发文件,我的媒体文件将无法正常工作。我不必对静态文件执行相同的操作。

无论如何,我希望这可以帮助其他人将头撞在这堵特殊的墙上。