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文件(用纯文本).文件在那里.我打赌我的配置有问题.
我已经清空了我的缓存,重新启动了我的开发服务器等等.没有豆子.
想法?
使用django-admin.py collectstatic或转到~/django/contrib/admin/static并复制admin文件夹(包含静态文件)并将其粘贴到项目的静态目录中.
**编辑**
您可以尝试的绝望或笨拙的解决方案:将您的STATIC_URL更改为'/ static /',从我看到的问题:
如果我将STATIC_URL更改为'/ static /',则情况恰恰相反:管理员很好,但我的公共页面丢失了他们的静态文件.
然后查看inspect element/firebug,查看公共页面中提供的网址.可能是'/'缺失或添加'/'.调整它,看它是否有效.
好,我知道了。就我而言,这个问题与上面讨论的所有细节都没有关系。而是,我的设置文件中有些混乱,并且我没有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,根据此处公认的答案,如果不更改我的开发文件,我的媒体文件将无法正常工作。我不必对静态文件执行相同的操作。
无论如何,我希望这可以帮助其他人将头撞在这堵特殊的墙上。
| 归档时间: |
|
| 查看次数: |
22689 次 |
| 最近记录: |