- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 Django 2.2。来自 Django 管理静态文件 documentation :
If you use django.contrib.staticfiles as explained above, runserver will do this automatically when DEBUG is set to True. If you don’t have django.contrib.staticfiles in INSTALLED_APPS, you can still manually serve static files using the django.views.static.serve() view.
This is not suitable for production use! For some common deployment strategies, see Deploying static files.
For example, if your STATIC_URL is defined as /static/, you can do this by adding the following snippet to your urls.py:
from django.conf import settings
from django.conf.urls.static import static
urlpatterns = [
# ... the rest of your URLconf goes here ...
] + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
Note
This helper function works only in debug mode and only if the given prefix is local (e.g. /static/) and not a URL (e.g. http://static.example.com/).
Also this helper function only serves the actual STATIC_ROOT folder; it doesn’t perform static files discovery like django.contrib.staticfiles.
我的解读
STATIC_ROOT
中的文件(这是真的吗?)debug = True
STATIC_URL = '/static/'
DEBUG
设置为 True 并且我按照文档中的说明使用和设置静态文件应用程序时,如果我执行 python manage.py runserver
来启动本地服务器, 将自动处理静态文件的服务(是吗??)我的问题
static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
添加到您项目的 urls.py
究竟有什么作用?STATIC_ROOT
目录本地提供静态文件?为了测试这个理论,在运行 collectstatic
之后,我删除了 static
目录以查看静态文件是否仍然可以正常加载(从 STATIC_ROOT),但他们没有!为什么?static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
添加到 urlpatterns
?示例
设置.py
DEBUG = True
...
INSTALLED_APPS = [
'django.contrib.admin',
...
'django.contrib.staticfiles',
'puppies.apps.PuppiesConfig'
]
...
STATIC_URL = '/static/'
STATICFILES_DIRS = [
os.path.join(BASE_DIR, "static"),
]
STATIC_ROOT = 'c:/lkdsjfkljsd_cdn'
在我所有的模板中,我都使用了{% load static %}
。
然后我做:python manage.py collectstatic
此时,我的 urls.py
中是否包含以下内容似乎并不重要 - 我的静态文件仍在加载,但我不知道它们是否会加载从我项目的静态目录或我的 STATIC_ROOT (c:/lkdsjfkljsd_cdn):
if settings.DEBUG is True:
urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
最后,如果我删除项目中的那些静态目录,所有 css、js 和图像都将不起作用,这让我相信我的 Django 项目正在从项目的静态目录而不是 STATIC_ROOT 加载静态文件。
那么,我如何告诉 Django 从我的 STATIC_ROOT 位置加载静态文件...而不是我的项目和应用程序中的静态目录? 或者,我是否误解了 Django不应该从本地的 STATIC_ROOT 位置加载文件吗?
*编辑(添加 HTML 图像)
最佳答案
我认为你混淆了一些东西。让我澄清一下。
static:
根据文档,它提供了用于提供静态文件的 URL 模式。如果你去implementation
,然后你会看到:
return [
re_path(r'^%s(?P<path>.*)$' % re.escape(prefix.lstrip('/')), view, kwargs=kwargs),
]
它的作用是去掉前缀左边的正斜杠(即把/static/
转换成static/
),然后有一个view(是 serve
) 拉取文件的人。
serve:
此函数执行服务文件。它将提供来自文档根目录的文件。
runserver:
runserver
命令运行 django 开发服务器。如果您在 INSTALLED_APPS
中安装了 django.contrib.staticfiles
,那么它将自动提供静态文件。如果您不想提供静态服务,请使用 runserver --nostatic
。 collectstatic
或 STATIC_ROOT
与此命令无关。
collectstatic
:此命令收集来自不同STATIC_DIRS
的所有静态文件,并将它们放在由STATIC_ROOT
定义的文件夹中。 collectstatic
在生产部署中非常有用,当您使用 NGINX 或 Apache 等反向代理服务器时。NGINX/Apache/Varnish 使用该文件夹(collectstatic 存储静态文件的位置)作为根目录并提供静态服务从中。不建议在生产中使用 runserver
。您可以使用 gunicorn/uwsgi 来为 django 提供服务。但是 gunicorn/uwsgi 不提供静态文件,因此使用反向代理服务器来提供静态文件。
最后:
回答您的问题:
不,你不必把它放在你的代码中,除非你没有在你的 INSTALLED_APPS
中添加 django.contrib.staticfiles
。
没有
你不需要。 STATIC_ROOT 用于不同的目的
不是。但是为了提供 MEDIA 文件,您可以添加以下模式:
if settings.DEBUG:
urlpatterns += [
re_path(r'^media/(?P<path>.*)$', serve, {
'document_root': settings.MEDIA_ROOT,
}),
]
在生产中,媒体文件也应该由反向代理服务器提供服务。
关于python - Django static(settings.STATIC_URL, document_root=settings.STATIC_ROOT) 实际上做了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56352489/
这是指向当前文件执行的目录吗? 最佳答案 不,它指向您的网络服务器的根目录 - 您网站的最顶层文件夹。 如果你想要当前文件的目录,使用: 目录名(__FILE__); 关于php - $_SERVER
基本上,我正在编写一个框架,作为它的一部分功能,它应该为最终开发人员提供一组完善的 URI/路径。 其中一些路径使用了 $_SERVER['DOCUMENT_ROOT']: /** * Absolu
这让我整个上午都快发疯了。 我们正在使用 git 在多台机器上开发一个网站。 在大多数情况下,我们可以将计算机设置为与开发服务器具有相同的设置。不幸的是,团队中有一个人在使用 Windows,它正在造
我有一个 WordPress 插件,我想在本地主机上运行以及在不进行修改的情况下进行部署,但我似乎无法使用一条语句设置目录的位置。 我想这样做: $feed->set_cache_location($
在 PHP 版本更新之前,我曾经能够在不指定文档根目录的情况下包含如下文件: 但是我现在必须包含如下相同的文件: 什么 php.ini 设置可以覆盖以前的行为? 最佳答案 你需要 php.ini
我有一个 WordPress 插件,我想在本地主机上运行以及在不进行修改的情况下进行部署,但我似乎无法使用一条语句设置目录的位置。 我想这样做: $feed->set_cache_location($
我的服务器全局变量有一个简单的问题:DOCUMENT_ROOT。 这是我的 config.php 文件: '; 问题是测试代码时..图片不显示,目录以:开头 C://program files/eas
我正在尝试访问托管在我的服务器上的文件,该文件位于 public_html 文件夹之外。访问ini文件的代码如下: $config = parse_ini_file($_SERVER['DOCUMEN
如果我有这样的目录结构: / /libraries/ /other-nonpublic-stuff/ /webroot/ 我如何将 /webroot/ 设置为 document_root,以便只有它的
我正在使用文档根目录来提供不起作用的绝对路径。如果我回显这条路径,结果是 C:wamp/www/proman/header.php。我给出了相对路径,它工作正常这里有什么问题? $path = $_S
我正在尝试在运行 Apache2 和 PHP5 的 Linux 上安装 PHP 应用程序。 我注意到,每当我尝试访问该应用程序(例如,点击 index.php 文件)时,浏览器都会返回一个空白页面。不
为了让 URL 在版本控制的项目中正常工作,我一直在使用 $_SERVER['DOCUMENT_ROOT']。问题是,我在一个文件夹中开发项目,所以我得到了这个: $_SERVER['DOCUMENT
当我在本地主机中使用 $_SERVER['DOCUMENT_ROOT'] 时,它输出:C:/apache2.2/htdocs。 然而,当我在我的服务器上使用它时,它输出:/var/www/ 我不能使用
我有一个安全/子目录,其中有几个文件,我想在这些文件上执行一些简单的 RewriteRules,只是默认一个 PHP 扩展。我很难让这些工作,经过反复试验,偶然发现了以下问题。 RewriteEngi
所以这是我第一次使用 xampp 创建测试站点。我最初将所有 php 文件都放在一个文件夹中,最近才决定组织数据(是的,事后看来我应该从一个有组织的文件夹结构开始。)无论如何,我的设置是这样的: “[
例如,这是一个好主意吗? require_once($_SERVER['DOCUMENT_ROOT'].'/include.php'); 如果您在同一台服务器上有两个虚拟主机,一个用于实时,一个用于开
这个问题在这里已经有了答案: Which $_SERVER variables are safe? (2 个答案) 关闭 7 年前。 直接访问 $_SERVER['DOCUMENT_ROOT'] 而
在设置我的 nginx 配置时,我遇到了这个问题。有没有人知道为什么会发生这种情况? root /folder/my_root; index index.php index.html index.h
我正在为一个已经由其他人编写的应用程序的客户项目设置测试环境。我在我们通常用于此类目的的托管帐户中创建了一个名为 iftc 的子目录。 现在,所有包含文件都找不到,因为它们是通过引用的 include
我知道 $_SERVER['DOCUMENT_ROOT'] 返回文档根目录(很可能类似于/home/user/public_html),但是有什么方法可以获取该文件夹的父目录吗? (即只是/home/
我是一名优秀的程序员,十分优秀!