Django 1.6
我在为我的 Django 管理员提供静态文件时遇到问题。
网址.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,
}),
)
设置.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 正在为我的管理员服务 OK,只是没有静态文件:CSS、JS 等。
我面向公众的页面的静态文件工作正常。
如果我将 STATIC_URL
更改为 '/static/'
,则情况 _正好相反_:管理员很好,但我的公共页面丢失了静态文件。
这是最奇怪的部分。如果我在浏览器中“查看”管理页面的源代码,它会显示静态页面的正确 URL,例如:
/static/admin/css/base.css
但如果我真的点击链接,它会变成这样:
http://localhost:8000/admin/static/admin/css/base.css
我认为它正在检查相对于 localhost:8000/admin/static/
而不仅仅是 localhost:8000/static/
的静态文件。它向 url 添加了一个额外的“ admin
”级别,例如 static
是域的一部分。我只是不知道如何摆脱它。
我试过 collectstatic
,但没有用。静态文件在我的静态目录中,它们只是没有被提供。例如,我可以输入 http://localhost:8000/static/admin/css/base.css
并获得正确的 CSS 文件(纯文本)。文件在那里。我敢打赌我的配置有问题。
我清空了我的缓存,重新启动了我的开发服务器,等等。没有豆子。
想法?
原文由 aljabear 发布,翻译遵循 CC BY-SA 4.0 许可协议
好的,我明白了。我的设置文件有些混乱,我没有正确设置
STATICFILES_DIRS
。最后,我在我的
settings
中实现了 Two Scoops of Django 1.6 中讨论的版本控制设置文件:有了这个,我的静态文件在管理员和没有管理员的情况下都得到了正确的服务。另一方面,根据 此处 接受的答案,如果不更改开发中的
urls.py
,我的媒体文件将无法工作。我不必为我的静态文件做同样的事情。无论如何,我希望这可以帮助其他人用头撞这堵墙。