Settings.py以及html和静态文件Django的路径

Settings.py and paths for html and static files Django

本文关键字:文件 Django 路径 静态 py 以及 html Settings      更新时间:2023-09-26

我使用的是Django 1.8,在运行开发Django服务器时,我在显示JavaScript和CSS时遇到了问题。我认为主要的问题是没有很好地理解将我的静态根目录和静态根目录设置为什么。我注意到,当我创建Django项目和应用程序时,我的文件夹/文件路径的创建方式与其他路径不同。我将把我的STATIC_ROOT和STATICILES_DIR分配给什么?

设置.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文件?

任何帮助都将不胜感激。非常感谢。

进行了更新。

这是使用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'。因此,要么将"staticfile"重命名为"static",要么反之亦然。虽然前者是惯例,所以将其重命名为"static",否则您的设置。py将在BASE目录中查找名为"static"的文件夹,但它永远找不到,因为您已将其命名为"staticfiles"

好的,按照问题的相反顺序回答您的问题。

首先,将html、javascript和css保存在单独的文件中总是一种更好的惯例和实践。所以所有的HTML文件都放在templates目录中,javascript和CSS放在静态目录中的js和CSS目录中。

现在,我不认为每次加载web应用程序时都需要访问一些json文件。如果是的话,那么它又出了问题,因为出于这个目的,你有你的数据库。因此,将数据移动到您的数据库中。否则,如果它是一次性的,比如数据上传,那么你可以把它保存在静态目录中的一个目录中,比如json。

现在最后,来谈谈你的主要问题STATIC_ROOT vs STATIC_DIRS vs STATIC_URL,那么这里已经有一个很好的解释了相同的东西->STATICILES_DIR,STATIC_ROOT和MEDIA_ROOT 之间的差异

另外,您需要将您的"staticfiles"目录重命名为"static",如在您的设置中所示。如果您提到了static_URL="/static/"而不是/"staticfiles"/,或者您可以更改static_ULL=/"staticfiles"/,但前者是一个遵循的约定,所以请尽量坚持。