[英]Django admin not serving static files?
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 可以為我的管理員服務,只是沒有靜態文件: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 文件(純文本)。 文件在那里。 我敢打賭我的配置有問題。
我已經清空了我的緩存,重新啟動了我的開發服務器等。沒有 bean。
想法?
使用django-admin.py collectstatic
或轉到~/django/contrib/admin/static
並復制 admin 文件夾(其中包含靜態文件)並將它們粘貼到項目的靜態目錄中。
**編輯**
您可以嘗試一個絕望或笨拙的解決方案:將您的 STATIC_URL 更改為“/static/”,正如我看到的問題一樣:
如果我將 STATIC_URL 更改為“/static/”,則相反:管理員很好,但我的公共頁面丟失了它們的靜態文件。
然后檢查inspect element/firebug
,查看公共頁面中提供了哪些 url。 可能缺少“/”或添加了“/”。 調整它,看看它是否有效。
好的,我想通了。 我的設置文件有些混亂,我沒有正確設置STATICFILES_DIRS
。
最后,我實現了兩個 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/'
有了這個,我的靜態文件在管理員和沒有的情況下都得到了正確的服務。 另一方面,根據此處接受的答案,如果不更改開發中的urls.py
,我的媒體文件就無法工作。 我不必為我的靜態文件做同樣的事情。
無論如何,我希望這可以幫助其他任何將頭撞在這堵特殊牆上的人。
我兩次遇到同樣的問題。 我解決它的方法是將admin的靜態文件粘貼到代碼中提到的靜態文件夾中-
cp -r /usr/local/lib/python2.7/site-packages/django/contrib/admin/static/admin /home/ec2-user/mywork-Deployment/mywork/static
這絕對有效,可以節省大量時間和麻煩。 希望能幫助到你!
如果它對任何人有幫助,我將分享我的代碼的問題所在。 可能是我的愚蠢錯誤,但可以節省某人的時間:
所以,基本上。 我的settings.py
變量是這樣的:
AWS_S3_CUSTOM_DOMAIN = f"{AWS_STORAGE_BUCKET_NAME}.s3.amazonaws.com/"
STATIC_URL = f"https://{AWS_S3_CUSTOM_DOMAIN}/static/"
我檢查了管理頁面 css src
標簽,發現 URL 是這樣的:(注意 URL 中的兩個正斜杠)
https://bucket-name.s3.amazonaws.com//admin/css/login.css
。
所以我稍微改變了我的變量,一切都很好。
AWS_S3_CUSTOM_DOMAIN = f"{AWS_STORAGE_BUCKET_NAME}.s3.amazonaws.com"
STATIC_URL = f"https://{AWS_S3_CUSTOM_DOMAIN}/static/"
這更正了錯誤的 URL 和完美加載的靜態文件。
對我有用的方法是我在我的 settings.py 文件中引用了靜態管理文件。 我希望這可以幫助別人 :)
'./static/admin/',
首先,您需要嘗試: python manage.py collectstatic
然后您遇到任何錯誤,只需按照以下步驟操作
step1 **從你的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
step3打開終端並輸入: python manage.py collectstatic
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.