- 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/
一个可怜的 Django 初学者在访问某些 View 上的静态文件(css、js)时遇到了阻塞问题。主要是,在主页上,这些静态文件是完全可以访问的,但在不同的页面上,则不能,并且布局完全损坏。 这是我
我正在尝试使用 Apache+mod_wsgi 将我的 Django 应用程序部署到生产环境中,但遇到了静态文件的问题。由于某种原因,我在生产中的模板无法识别 {{ STATIC_URL }} 。在开
我正在尝试在 Django 中使用 Twitter Bootstrap。我大部分时间都在使用它。我有一个正确链接 CSS 的 profile.html 模板,但我有一个没有在 STATIC_URL 前
Django 版本是 1.4。我已经阅读了官方文档,并用谷歌搜索了我的问题。 首先我是按照官方文档Managing static files在 settings.py 中添加: TEMPLATE_CO
http://docs.djangoproject.com/en/dev/howto/static-files/ 这表明我可以使用 STATIC_URL在我的模板中从 settings.py 中获取值
是的,我希望它像 Flask 框架一样工作 - 我可以像这样设置参数: static_folder=os.getcwd()+"/static/", static_url_path="" 并且 ./st
我正在尝试升级 django-summernote到我的 django 1.9 项目中的版本 0.8.5,但是使用给定的设置,我收到此错误: File "my_project/settings/ba
如果我只定义一个,页面显示时没有任何 CSS/JS。如果我定义两者,页面加载正常。这是为什么?我认为 STATICFILES_DIRS 是无关紧要的? 这里有一个答案,但它没有回答为什么我需要两者。它
请考虑我的 django 项目下面给出的 seetings.py 文件 # Django settings for sadhana project. DEBUG = True TEMPLATE_DEB
我在 http://example.com 上有一个公司 wordpress 博客,在 http://example.com/web 上成功部署了 Django 应用程序。 我的应用程序是一个简单的应
我是 Python 和 Tornado 网络框架的初学者。在研究《Introduction to Tornado》一书中的模板部分时,有一行让我很困惑: 当没有库导入到命名空间时,应用程序如何知道在
我有一个模板,base.html,它在其他几个模板中用于各种 View 。这些模板中的每一个都以适当的 {% extends "base.html"%} 开头。在基本模板中,我想这样指定一个静态样式表
我在使用 {{ STATIC_URL }} 在模板中添加 CSS 时遇到了一些麻烦。该标签在链接标记内不起作用,但在其他任何地方都起作用。 这个: {{ STATIC_URL }} 正确翻译成 /st
我的基本文件中有以下代码行: document.write(''); 最近我从 Django 1.6 升级到 1.11,并且正在从使用 STATIC_URL 切换到使用 {% static %}。但是
我的问题是我在 java 脚本代码中使用 Django STATIC_URL 。我的代码在我的开发环境中工作,但是当我将其上传到 pythonanywhere.com 时,它无法工作。我检查了我的代码
在我的网站中,我集成了一个样式表和一个 javascript 文件。我按如下方式加载它: javascript 有效,但样式表无效。我也这样试过: 当我这样做时,样式表将加载,但是当我从未连接
我有一个 django(1.6.5) 项目,我正在使用 django-configurations(0.8)包,我正在尝试通过以下方式使用环境变量在 settings.py 文件中设置 STATIC_
在 Pyramid 应用程序中,我定义了一个用于提供 css/js 文件的静态 View 和另一个用于提供上传文件等其他数据的静态 View : config.add_static_view('sta
所以我现在正在尝试在服务器上运行 Django 的多个实例,一个在 /dev/ 下,一个在 /test/ 下,等等。 网络服务器正在设置正确的 SCRIPT_NAME 设置,我可以正常提供页面、模板和
当我在 urls.py 中添加 STATIC_URL 时: urlpatterns = [...]+static(settings.STATIC_URL) 但我得到了 ^static\/(?P.*)$
我是一名优秀的程序员,十分优秀!