【问题标题】:Settings.py and paths for html and static files Djangohtml 和静态文件 Django 的 Settings.py 和路径
【发布时间】:2016-07-18 20:14:24
【问题描述】:

我使用的是 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 文件?

任何帮助将不胜感激。谢谢。

进行了更新。

【问题讨论】:

  • 对于你的静态文件,你需要添加一个额外的 urlpattern(在 dev env 中):static(settings.STATIC_URL, document_root=settings.STATIC_ROOT), here in the doc
  • 我添加了额外的 URL 模式。我只是想弄清楚如何在我的 HTML 文件中显示我用嵌入式 JavaScript/JQuery 抓取的 JSON 文件数据

标签: javascript jquery python json django


【解决方案1】:

这是解决您使用 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
});

查看这个以获得更好的解释 -> Using Jquery to get JSON objects from local file

还有一件事,如果你克服了这个问题,你可能会遇到困难。

在您的 settings.py 中,您提到了您的 STATIC_URL = '/static/',而您将该文件夹命名为 'staticfiles'。因此,要么将“静态文件”重命名为“静态”,反之亦然。虽然前者是约定,所以将其重命名为“static”,否则您的 settings.py 将在 BASE 目录中查找名为“static”的文件夹,但它永远找不到,因为您将其命名为“staticfiles”

【讨论】:

  • 谢谢,但我已经使用 getJSON 编写了一个 Jquery 函数,用 JSON 文件中的数据填充我的 jstree 和下拉菜单。我只是不知道如何使它与 Django 一起工作。我使用了 XAMPP 和它附带的 apache 服务器,所以我只需将所有文件放在 htdocs 中,一切都会正常工作。我想我只是不知道如何为 Django 等使用适当的标签。
  • 我是否将其加载到我的 html 模板中? { % load staticfiles %}
  • 您是否遇到任何特定错误,或者仅仅是您无法在 html 中加载静态文件?因为在我的回答中我提到了同样的事情,你可能会因为 STATIC_URL 事情而陷入困境。
  • 我将“staticfiles”文件夹重命名为“static”,并且我的 STATIC_URL = '/static/'。我只是没有像以前不使用 Django 时那样从我的 JSON 中获取数据来填充我的下拉列表。
  • 当我从 cmd 运行服务器时,我收到以下错误:“GET /OSTypeddrop_script.js HTTP/1.1”404 2204 这是我的 javascript 的名称,我也用来将我的 JSON 数据加载到
【解决方案2】:

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

首先,将 html、javascript 和 css 保存在单独的文件中始终是一种更好的惯例和做法。所以你所有的 HTML 文件都放在模板目录中,而 javascript 和 CSS 放在静态目录中的 js 和 css 目录中。

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

最后,来到你的主要问题 STATIC_ROOT vs STATIC_DIRS vs STATIC_URL,那么这里已经有一个很好的解释->Differences between STATICFILES_DIR, STATIC_ROOT and MEDIA_ROOT

另外,您需要将“staticfiles”目录重命名为“static”,如您在 settings.py 中提到的 STATIC_URL = '/static/' 而不是 /'staticfiles'/ 否则您可以更改 STATIC_URL = / 'staticfiles'/,但前者是遵循的约定,所以尽量坚持。

【讨论】:

  • 好的,我将目录从 staticfiles 更改为 static。我只想使用 JSON 文件在页面上显示数据。它主要用于测试目的。我应该将 JSON 文件放在我的 Django 项目中的什么位置?
  • 您可以在静态文件夹中创建一个名为 json 的文件夹并将您的 json 文件保存在那里,但我的意思是,您无法在 html 模板中提供/包含 json 文件您可以将 js 或 css 文件包含在 html 文件的头部的方式 js 和 css 文件中写入了前端逻辑,而您的 json 文件中仅包含数据,仅用于测试目的因此您的 json 文件中的数据实际上应该来自 database->models.py->views.py->(js->html) 或 (html) 取决于您是直接将数据呈现到 html 还是作为 HTTPResponse 返回。
  • 嗯,我的目标是能够将数据从我的数据库导入 JSON 文件,从 JSON 文件能够使用 javascript 和 GetJSON 方法/Jquery 将数据动态显示到我的 html 页面上。所以我可以简单地将我的 JSON 数据放在我的静态目录内的 JSON 文件夹中,但是我需要在 settings.py 中进行哪些更改才能使其正常工作?
  • 为什么需要额外的步骤将数据写入 JSON?我的意思是它不是这样工作的。您需要在 views.py 中编写逻辑以从数据库中读取数据,如果您想以 JSON 格式将其发送到您的 javascript 或 html 文件,那么显然您可以使用序列化程序。首先从数据库读取,然后写入 JSON,然后从 javascript 或 HTML 读取该 JSON 是没有意义的,当您可以直接从视图中读取 DB 中的信息时,直接将该信息呈现到 javascript 或 html 模板。
  • 这仅用于测试目的。我想看看我是否可以以某种方式传入我的 JSON 文件并在我的 javascript 中利用我的 getJSON 并将 JSON 中的数据显示到我的模板中。我的静态目录中已经有了我的 json 目录。无论如何我可以导入我的 Json 文件吗?
猜你喜欢
  • 1970-01-01
  • 2023-03-03
  • 2018-02-04
  • 2014-05-26
  • 2016-06-24
  • 1970-01-01
  • 1970-01-01
  • 2012-10-04
  • 1970-01-01
相关资源
最近更新 更多