簡體   English   中英

在Django中加載靜態文件

[英]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_APPSstatic/子目錄。

因此,如果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.

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