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

时间:2014-05-19 00:56:25

标签: 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,
        }),
)

settings.py

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

STATIC_ROOT = '/Users/me/projectdir/static/'
STATIC_URL = 'static/'
...

模板(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>
...

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

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

如果我将STATIC_URL更改为'/static/',则相反为真:管理员很好,但我的公开网页会丢失其静态文件。

这是最奇怪的部分。如果我&#34;查看来源&#34;在我的浏览器中,我显示了管理页面,它显示了静态页面的正确URL,例如:

/static/admin/css/base.css

但如果我真的按照链接进行操作,则将其更改为:

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

我认为它正在检查相对于localhost:8000/admin/static/的静态文件,而不仅仅是localhost:8000/static/。它增加了额外的&#34; admin&#34;级别为网址,如static是域的一部分。我无法弄清楚如何摆脱它。

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

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

想法?

5 个答案:

答案 0 :(得分:5)

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

<强> **编辑**

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

  

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

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

答案 1 :(得分:4)

好的,我明白了。我的问题与上面讨论的所有细节没什么关系。相反,我的设置文件中存在一些混淆,我没有正确设置STATICFILES_DIRS

最后,我实现了Two Scoops of 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/'

有了这个,我的静态文件正在正确提供,无论是在管理员还是没有。另一方面,根据接受的答案here,我的媒体文件在没有更改开发中的urls.py的情况下无效。我没有必要为我的静态文件做同样的事情。

无论如何,我希望这可以帮助其他任何人对这个特定的墙壁猛烈抨击。

答案 2 :(得分:1)

我两次遇到相同的问题。 我解决问题的方法是将admin的静态文件粘贴到代码中提到的静态文件夹中-

cp -r /usr/local/lib/python2.7/site-packages/django/contrib/admin/static/admin /home/ec2-user/mywork-Deployment/mywork/static

这个绝对可以工作,并且可以节省很多时间和麻烦。 希望对您有帮助!

答案 3 :(得分:0)

为我解决的方法是在我的settings.py文件中引用了静态管理文件。我希望这可以帮助某人:)

self.setAutoFillBackground(True)

答案 4 :(得分:0)

首先您需要尝试:python manage.py collectstatic 那么你有任何错误只需按照这些步骤

第一步 **Remove these code from you**r settings.py

STATICFILES_DIRS = (
    os.path.join(BASE_DIR, "static"),
    '/home/uour project/src/project name/static/',
)  //remove these lines

步骤 2

替换为 replace with these codes

STATIC_ROOT = os.path.join(BASE_DIR, 'static') //add these line

步骤 3 打开终端并输入:python manage.py collectstatic