use*_*563 110 django django-urls django-staticfiles
我很困惑static root
,想澄清一些事情.
为了服务于Django的静态文件,下面应该是settings.py
和urls.py
:
import os
PROJECT_DIR=os.path.dirname(__file__)
Run Code Online (Sandbox Code Playgroud)
STATIC_ROOT= os.path.join(PROJECT_DIR,'static_media/')
Run Code Online (Sandbox Code Playgroud)
STATIC_URL = '/static/'
Run Code Online (Sandbox Code Playgroud)
STATICFILES_DIRS = ( os.path.join(PROJECT_DIR,'static/'),)
Run Code Online (Sandbox Code Playgroud)
......并在urls.py
以下几行中:
from django.contrib.staticfiles.urls import staticfiles_urlpatterns
urlpatterns += patterns('', (
r'^static/(?P<path>.*)$',
'django.views.static.serve',
{'document_root': settings.STATIC_ROOT}
))
Run Code Online (Sandbox Code Playgroud)
python manage.py collectstatic
问题:
任何人都可以向我解释工作流程:如何理想地完成工作.到目前为止,我将上面的代码片段复制/粘贴到他们指定的位置,并继续在静态目录中创建新文件,它可以工作.settings.STATIC_ROOT
然而,在我看来,我指的是另一个目录.
如果有人能够解释每个设置的工作流程,那将是很好的:如何收集和管理文件,以及遵循什么样的好习惯.
谢谢.
suh*_*lvs 75
./manage.py collectstatic
将收集静态文件以进行部署的目录的绝对路径. 例:STATIC_ROOT="/var/www/example.com/static/"
现在,该命令./manage.py collectstatic
将所有静态文件(即应用程序中的静态文件夹,所有路径中的静态文件)复制到目录/var/www/example.com/static/
.现在你只需要在apache或nginx..etc上提供这个目录.
在
URL
其中的静态文件STATIC_ROOT
目录供应(由Apache或nginx..etc). 示例:/static/
或http://static.example.com/
如果设置了STATIC_URL = 'http://static.example.com/'
,那么你就必须服务于STATIC_ROOT
文件夹(即"/var/www/example.com/static/"
由Apache或nginx的在URL) 'http://static.example.com/'
(这样你可以参考静态文件'/var/www/example.com/static/jquery.js'
用'http://static.example.com/jquery.js'
)
现在在您的django-templates中,您可以通过以下方式引用它:
{% load static %}
<script src="{% static "jquery.js" %}"></script>
Run Code Online (Sandbox Code Playgroud)
这将呈现:
<script src="http://static.example.com/jquery.js"></script>
Run Code Online (Sandbox Code Playgroud)
ken*_*eni 29
STATICFILES_DIRS
:您可以在此处保留项目的静态文件,例如模板使用的静态文件.
STATIC_ROOT
:将其留空,当您这样做时manage.py collectstatic
,它将搜索系统上的所有静态文件并将其移动到此处.您的静态文件服务器应该映射到该文件夹,无论它位于何处.运行collectstatic后检查它,你会发现django已经构建的目录结构.
- - - - 编辑 - - - - - - - -
正如@DarkCygnus指出的那样,STATIC_ROOT应该指向文件系统上的一个目录,该文件夹应该是空的,因为它将由Django填充.
STATIC_ROOT = os.path.join(BASE_DIR,'staticfiles'))
要么
STATIC_ROOT ='/ opt/web/project/static_files
"
--------结束编辑-----------------
STATIC_URL
:'/ static /'通常很好,它只是静态文件的前缀.
小智 11
首先,我解释一下STATIC_ROOT,然后解释一下 [STATIC_URL 2。
\nSTATIC_ROOT
可以设置一个文件夹路径,并与下面的命令一起使用,将 Django 项目中的 apps 和 admin 的静态文件收集到该文件夹路径中。*STATIC_ROOT
永远不会影响STATIC_URL
:
python manage.py collectstatic \n
Run Code Online (Sandbox Code Playgroud)\n并且STATIC_ROOT
仅适用于生产模式,即DEBUG = False,如下所示:
# "core/settings.py"\n\nDEBUG = False // Production Mode\n
Run Code Online (Sandbox Code Playgroud)\n现在,我们有一个 django 项目,其中的静态文件core.js
位于core
文件夹 where settings.py
is 和文件myapp.css
夹myapp
which is a app中,如下所示:
以及文件夹中的css
、fonts
、img
和js
文件夹,如下所示。*我使用为此 django 项目命名的虚拟环境,因此管理的静态文件位于其中,文件夹的相对路径为:admin
venv
venv
admin
venv/lib/python3.8/site-packages/django/contrib/admin/static/admin/
然后,我们将我的例子中 Windows 上BASE_DIR / \'static/\'
的设置为。另外,我们设置是因为正如我之前所说,仅适用于生产模式:C:\\Users\\kai\\django-project\\static
STATIC_ROOT
DEBUG = False
STATIC_ROOT
# "core/settings.py"\n\nDEBUG = False // Production Mode\n\nSTATIC_ROOT = BASE_DIR / \'static/\' # Here\nSTATIC_URL = \'static/\'\n
Run Code Online (Sandbox Code Playgroud)\n现在,我们运行以下命令:
\npython manage.py collectstatic \n
Run Code Online (Sandbox Code Playgroud)\n然后,static
创建文件夹css
,fonts
并将文件夹**和img
文件夹中的文件js
夹收集到文件夹中,如下所示,但正如我们所见,文件夹中没有收集到文件夹中,如下所示,因为正如我之前所说,该命令收集静态来自 django 项目中的应用程序和管理员的文件,但其中的文件夹不是应用程序和管理员。这就是为什么文件夹中没有收集到文件夹中的原因:admin
myapp.css
myapp
static
core.js
core
static
python manage.py collectstatic
core
settings.py
core.js
core
static
但是,有一种方法可以将文件夹收集到core.js
文件夹中。为此,我们需要将Windows 上的STATICFILES_DIRS设置为STATICFILES_DIRS,如下所示:core
static
BASE_DIR / \'core/static/\'
C:\\Users\\kai\\django-project\\core\\static
settings.py
python manage.py collectstatic \n
Run Code Online (Sandbox Code Playgroud)\n或者,我们需要设置core
为INSTALLED_APPS,如下settings.py
所示:
# "core/settings.py"\n\nDEBUG = False\n\nSTATICFILES_DIRS = [ # Here\n BASE_DIR / \'core/static/\'\n]\n\nSTATIC_ROOT = BASE_DIR / \'static/\'\nSTATIC_URL = \'static/\'\n
Run Code Online (Sandbox Code Playgroud)\n现在,我们再次运行以下命令:
\n# "core/settings.py"\n\nDEBUG = False\n\nINSTALLED_APPS = [\n \'core\', # Here\n]\n
Run Code Online (Sandbox Code Playgroud)\n然后输入yes
并回车即可覆盖现有static
文件夹:
\n\n您已请求在设置中指定的\nas目标位置收集静态文件:
\nC:\\Users\\kai\\django-project\\static
\n这将覆盖现有文件!你确定你要这么做吗?
\n输入“yes”继续,或输入“no”取消:yes
\n
现在,core.js
incore
文件夹被收集到static
文件夹中,如下所示:
接下来我就解释一下STATIC_URL
。
STATIC_URL
可以将静态文件 URL 的前目录部分设置在静态文件 URL 的主机部分和文件部分之间,如下所示。*STATIC_URL
永远不会影响STATIC_ROOT
:
python manage.py collectstatic \n
Run Code Online (Sandbox Code Playgroud)\n例如我们设置\'static/\'
为STATIC_URL
insettings.py
如下图所示。*STATIC_URL
适用于开发模式和生产模式DEBUG = True
:DEBUG = False
| Host | Directory | File |\n | |Front | Back | |\n <-------------> <----> <-------> <------> \nhttps://www.example.com/static/admin/css/base.css\n
Run Code Online (Sandbox Code Playgroud)\n然后,打开 Django 管理:
\n\n然后,按F12打开开发者工具,从Sources中检查当前打开的Django Admin页面使用的资源,其中有我们刚刚收集到文件夹中的admin静态文件static
:
然后,将鼠标悬停base.css
在css
检查 URL:
正如我们所看到的,我们可以设置前面的目录部分static
:
# "core/settings.py"\n\nDEBUG = False\n\nSTATICFILES_DIRS = [\n BASE_DIR / \'core/static/\'\n]\n\nSTATIC_ROOT = BASE_DIR / \'static/\'\nSTATIC_URL = \'static/\' # Here\n
Run Code Online (Sandbox Code Playgroud)\nwww.example.com
并且,下面的 URL 是在with的情况下https
:
Here \n <------>\nhttp://localhost:8000/static/admin/css/base.css\n
Run Code Online (Sandbox Code Playgroud)\n并且,我们可以将前面的目录部分更改static
为hello/world
.
因此,只需将其更改STATIC_URL
为 ,\'static/\'
如下\'hello/world/\'
所示:
Here\n \xe3\x80\x80\xe3\x80\x80\xe3\x80\x80\xe3\x80\x80\xe3\x80\x80\xe3\x80\x80\xe3\x80\x80\xe3\x80\x80\xe3\x80\x80\xe3\x80\x80\xe3\x80\x80<------>\nhttps://www.example.com/static/admin/css/base.css\n
Run Code Online (Sandbox Code Playgroud)\n然后,刷新 Django 管理页面:
\n\n然后,将前面的目录部分static
改为hello/world
如下所示:
# "core/settings.py"\n\nDEBUG = False\n\nSTATICFILES_DIRS = [\n BASE_DIR / \'core/static/\'\n]\n\nSTATIC_ROOT = BASE_DIR / \'static/\'\nSTATIC_URL = \'hello/world/\' # Here\n
Run Code Online (Sandbox Code Playgroud)\n
归档时间: |
|
查看次数: |
92220 次 |
最近记录: |