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文件(以纯文本格式)。文件在那里。我打赌我的配置有问题。
我已经清空了我的缓存,重新启动了我的开发服务器等等。没有豆子。
想法?
答案 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
STATIC_ROOT = os.path.join(BASE_DIR, 'static') //add these line
步骤 3
打开终端并输入:python manage.py collectstatic