簡體   English   中英

html和靜態文件Django的Settings.py和路徑

[英]Settings.py and paths for html and static files Django

我正在使用Django 1.8,並且在運行開發Django服務器時無法顯示我的JavaScript和CSS。 我認為主要問題是對將靜態根目錄和靜態根目錄設置為什么沒有很好的了解。 我已經注意到,創建Django項目和應用程序時,文件夾/文件路徑的創建方式與其他路徑不同。 我將STATIC_ROOT和STATICFILES_DIR分配給什么?

Settings.py:

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(_file_)))
INSTALLED_APPS = (
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'Myapp'
)

ROOT_URLCONF = 'MyProject.urls'
TEMPLATES = [
{
    'BACKEND': 'django.template.backends.django.DjangoTemplates',
    'DIRS': [os.path.join(BASE_DIR, 'templates' )],
    'APP_DIRS': True,
    'OPTIONS': {
        'context_processors': [
            'django.template.context_processors.debug',
            'django.template.context_processors.request',
            'django.contrib.auth.context_processors.auth',
            'django.contrib.messages.context_processors.messages',
        ],
    },
},
]

STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, "static/")
MEDIA_ROOT = os.path.join(BASE_DIR, "media/")

STATIC_ROOT = os.path.join(os.path.dirname(BASE_DIR), "static")

urls.py:

from django.conf.urls import include, url
from django.contrib import admin
from Myapp.views import startpage 
from django.conf.urls.static import static
from django.conf import settings

urlpatterns = [
# Examples:
# url(r'^$', 'MyProject.views.home', name='home'),
# url(r'^blog/', include('blog.urls')),

url(r'^admin/', include(admin.site.urls)),
url(r'^$', startpage)
] + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)

views.py:

from django.shortcuts import render, render_to_response

# Create your views here.
def startpage(request):
return render_to_response('htmlpage.html');

這是我當前的目錄:

C:\Users\Me\DjangoProjects\
                           |-----MyProject\
                                         |------MyApp\
                                                       |----_init_.py
                                                       |----admin.py
                                                       |----models.py
                                                       |----tests.py
                                                       |----views.py
                                                       |----_pycache_\
                                                       |----migrations\
                                         |------MyProject\
                                                       |----_init_.py
                                                       |----settings.py
                                                       |----urls.py
                                                       |----wsgi.py
                                                       |----_pycache_\
                                         |------staticfiles\
                                         |------templates\
                                                       |----htmlpage.html
                                         |------db.sqlite3
                                         |------manage.py

我也不知道將JSON文件放在哪里,因為我正在使用jquery / javascript從JSON文件中獲取數據。 另外,我的javascript代碼嵌入在html文件中,可以嗎?還是需要制作一個單獨的javascript文件?

任何幫助將非常感激。 謝謝。

進行了更新。

好的,按照與問題相反的順序回答您的問題。

首先,將html,javascript和css放在單獨的文件中始終是更好的慣例。 因此,所有HTML文件都放在模板目錄中,而javascript和CSS則在靜態目錄中的js和css目錄中。

現在,我認為您不需要在每次加載Web應用程序時訪問一些json文件。 如果是的話,那么出於此目的又有問題,您就擁有了數據庫。 因此,將數據移至您的數據庫。 否則,如果它是一次性的,比如說數據上傳,那么您可以將其保存在靜態目錄中的json目錄中。

現在,最后,談到您的STATIC_ROOT與STATIC_DIRS與STATIC_URL的主要問題,那么這里已經有一個很好的解釋-> STATICFILES_DIR,STATIC_ROOT和MEDIA_ROOT之間的區別

另外,您需要像在settings.py中那樣將“ staticfiles”目錄重命名為“ static”。您提到STATIC_URL ='/ static /'而不是/'staticfiles'/,否則您可以更改STATIC_URL = /'staticfiles' /,但前者是遵循的約定,因此請堅持該原則。

通常,這是解決您使用javascript從json文件讀取數據的問題的解決方案,即,它不依賴django或php或類似的東西。

function getAllSupportedItems( ) {
    return $.getJSON("staticfiles/json_folder/name_of_your_json_file.json").then(function (data) {
        return data.items;
    });
}

getAllSupportedItems().done(function (items) {
    // you have your items here
});

請參閱此以獲得更好的解釋-> 使用Jquery從本地文件獲取JSON對象

還有一件事,如果克服了這個問題,您可能會陷入困境。

在settings.py中,您提到了STATIC_URL ='/ static /',而您將該文件夾命名為'staticfiles'。 因此,您可以將“ staticfiles”重命名為“ static”,反之亦然。 盡管前者是慣例,所以將其重命名為“ static”,否則您的settings.py將在BASE Directory中查找名為“ static”的文件夾,但由於您將其命名為“ staticfiles”,因此它將永遠找不到。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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