簡體   English   中英

Django 管理員不提供靜態文件?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM