2015-02-24 168 views
1

我只是在我的智慧結束在這裏。我想從靜態文件夾中加載自定義的js文件。 當我在Chrome瀏覽器上查看源代碼時,它沒有顯示,並且在刷新頁面時未加載。在django中加載靜態文件

它看起來像在Chrome什麼(我不能點擊我的文件,而jQuery不會亮):

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"/> 
<script src="/static/js/ajax.js"/> 

UPDATE: 這是我現在有,但它是仍然沒有工作

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被複制過了,但是當我運行服務器時它仍然沒有顯示出來。有任何想法嗎?

enter image description here

我在想什麼?請幫忙。 Python 2.7,Django 1.7

+0

你能發表你的看法嗎? – aganders3 2015-02-24 04:59:02

+0

看起來像很多雙引號。也許這樣混合起來:'' – 2015-02-24 05:08:28

+0

也通常你把你的靜態文件放在一個名爲something的文件夾中像'assets'並將其添加到'STATICFILES_DIRS',你還必須確保'STATIC_URL'設置爲'/ static /',並且'STATIC_ROOT'設置爲靜態文件usu的路徑。 '「static」',然後調用'python manage.py collectstatic'。 [靜態文件操作指南文檔](https://docs.djangoproject.com/en/1.7/howto/static-files/)非常好。 – 2015-02-24 05:12:57

回答

2

強制性閱讀:

https://docs.djangoproject.com/en/1.7/howto/static-files/ https://docs.djangoproject.com/en/1.7/ref/contrib/staticfiles/ https://docs.djangoproject.com/en/1.7/ref/settings/#static-files


關於這些設置:

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),
  • 秒,通過使用AppDirectoriesFinder,查看您的每個INSTALLED_APPSstatic/子目錄。

所以,如果你想保持每個應用程序的靜態文件,你不需要依靠FileSystemFinder,你可以離開STATICFILES_DIRS爲空。

但是,如果你想保留所有的靜態文件在一個地方,指向STATICFILES_DIRS像你這樣的任何目錄。對於您使用的第三方應用程序,您應該仍然保留AppDirectoriesFinder,如Django Admin,這些應用程序隨附自己的靜態文件。


STATIC_ROOT = 'static/' 

這是不必要的開發設置與runserver,因爲Django的開發服務器提供的靜態文件本身。

但是,對於生產,您可能希望您的Web服務器(Apache,Nginx,...)或內容交付網絡爲您處理靜態文件傳遞。然後,您可以使用collectstatic命令來收集來自任何地方的所有靜態文件(例如您的STATICFILES_FINDERS可以找到的所有靜態文件),並將它們全部放在您計算機上的一個目錄中,從那裏您可以輕鬆地將它們傳遞給Nginx或複製到CDN。

+0

這是使用靜態文件的很好的演練。我剛剛開始工作。這個問題似乎是使用bootstrap3-django插件。模板標籤混淆了我的其他靜態文件聲明。我最終擺脫它並手動包括引導文件。感謝您的幫助! – cheenbabes 2015-02-25 18:28:36

0

你有這個在你的設置?

STATICFILES_FINDERS = (
    'django.contrib.staticfiles.finders.FileSystemFinder', 
    'django.contrib.staticfiles.finders.AppDirectoriesFinder', 
    # django.contrib.staticfiles.finders.DefaultStorageFinder', 
)