[英]Loading static files in django
我只是機智在這里。 我想從靜態文件夾加載我的自定義js文件。 當我在Chrome上查看源代碼時,刷新頁面時未顯示源代碼,也未加載源代碼。
在Chrome上的外觀(當jQuery點亮時,我無法單擊文件):
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"/>
<script src="/static/js/ajax.js"/>
更新 :這是我現在所擁有的,但仍然無法正常工作
base.html文件
{% load staticfiles %}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"/>
<script src="{% static 'js/ajax.js' %}"/>
settings.py
STATIC_ROOT = 'static/'
STATIC_URL = 'assets/'
STATICFILES_DIRS=(BASE_DIR, 'assets')
我運行python manage.py collectstatic
,它復制了一堆文件。
這是更新結構的布局。 您可以看到ajax.js被復制了,但是當我運行服務器時它仍然沒有顯示。 有任何想法嗎?
我想念什么? 請幫忙。 Python 2.7,Django 1.7
必讀:
https://docs.djangoproject.com/zh-CN/1.7/howto/static-files/ https://docs.djangoproject.com/zh-CN/1.7/ref/contrib/staticfiles/ https://docs.djangoproject.com/ EN / 1.7 / REF /設置/#靜態文件
關於這些設置:
STATIC_URL = 'assets/'
這意味着您的應用應提供帶有assets/{name}
前綴的靜態文件。
我認為這是問題的根源 -開頭的/
丟失了,並且您正在為靜態資源生成相對鏈接,這聽起來像個壞主意。
現在,位於http://yourserver/foo/bar/
將通過相對鏈接詢問靜態文件:
<img src="assets/{name}">
,因此您的瀏覽器將在/foo/bar/assets/{name}
查找而未找到任何內容。
通常,您需要靜態文件的絕對鏈接,因此應使用STATIC_URL = '/assets/'
並獲取絕對鏈接<img src="/assets/{name}">
。
STATICFILES_DIRS=(BASE_DIR, 'assets')
好的,那么Django如何找到靜態文件? Django項目可以具有許多已安裝的應用程序,並且每個應用程序可以具有自己的包含靜態文件的目錄。
所以有這個設置(默認設置):
STATICFILES_FINDERS = (
"django.contrib.staticfiles.finders.FileSystemFinder",
"django.contrib.staticfiles.finders.AppDirectoriesFinder")
這意味着,在開發設置( runserver
)上,每當有人要求http://yourserver/assets/ponies/applejack.jpg
(其中/assets/
是您的STATIC_URL
,現在希望是已修復的)時,Django都會嘗試查找文件ponies/applejack.jpg
以下列方式:
FileSystemFinder
,它會在您指定的某些固定目錄( STATICFILES_DIRS
)中STATICFILES_DIRS
, AppDirectoriesFinder
來查找每個INSTALLED_APPS
的static/
子目錄。 因此,如果STATICFILES_DIRS
應用程序保留靜態文件,則無需依賴FileSystemFinder
,可以將STATICFILES_DIRS
留空。
但是,如果要將所有靜態文件都放在一個位置,請像您一樣將STATICFILES_DIRS
指向任何目錄。 您仍應為自己使用的第三方應用(如Django Admin)保留AppDirectoriesFinder
,這些應用帶有其自己的靜態文件。
STATIC_ROOT = 'static/'
這對於使用runserver
進行開發設置是不必要的,因為Django dev服務器本身會提供您的靜態文件。
但是,對於生產而言,您可能希望您的Web服務器(Apache,Nginx等)或內容傳送網絡為您處理靜態文件傳送。 然后,您可以使用collectstatic
命令從任何地方收集所有靜態文件(例如,您的STATICFILES_FINDERS
可以找到的所有靜態文件),並將它們全部放置在計算機上的一個目錄中,從那里您可以輕松地將它們傳遞到Nginx或復制到到CDN。
您的設置中有這個嗎?
STATICFILES_FINDERS = (
'django.contrib.staticfiles.finders.FileSystemFinder',
'django.contrib.staticfiles.finders.AppDirectoriesFinder',
# django.contrib.staticfiles.finders.DefaultStorageFinder',
)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.