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 \nRun Code Online (Sandbox Code Playgroud)\n并且STATIC_ROOT仅适用于生产模式,即DEBUG = False,如下所示:
# "core/settings.py"\n\nDEBUG = False // Production Mode\nRun Code Online (Sandbox Code Playgroud)\n现在,我们有一个 django 项目,其中的静态文件core.js位于core文件夹 where settings.pyis 和文件myapp.css夹myappwhich is a app中,如下所示:
以及文件夹中的css、fonts、img和js文件夹,如下所示。*我使用为此 django 项目命名的虚拟环境,因此管理的静态文件位于其中,文件夹的相对路径为:adminvenvvenvadminvenv/lib/python3.8/site-packages/django/contrib/admin/static/admin/
然后,我们将我的例子中 Windows 上BASE_DIR / \'static/\'的设置为。另外,我们设置是因为正如我之前所说,仅适用于生产模式:C:\\Users\\kai\\django-project\\staticSTATIC_ROOTDEBUG = FalseSTATIC_ROOT
# "core/settings.py"\n\nDEBUG = False // Production Mode\n\nSTATIC_ROOT = BASE_DIR / \'static/\' # Here\nSTATIC_URL = \'static/\'\nRun Code Online (Sandbox Code Playgroud)\n现在,我们运行以下命令:
\npython manage.py collectstatic \nRun Code Online (Sandbox Code Playgroud)\n然后,static创建文件夹css,fonts并将文件夹**和img文件夹中的文件js夹收集到文件夹中,如下所示,但正如我们所见,文件夹中没有收集到文件夹中,如下所示,因为正如我之前所说,该命令收集静态来自 django 项目中的应用程序和管理员的文件,但其中的文件夹不是应用程序和管理员。这就是为什么文件夹中没有收集到文件夹中的原因:adminmyapp.cssmyappstaticcore.jscorestaticpython manage.py collectstaticcoresettings.pycore.jscorestatic
但是,有一种方法可以将文件夹收集到core.js文件夹中。为此,我们需要将Windows 上的STATICFILES_DIRS设置为STATICFILES_DIRS,如下所示:corestaticBASE_DIR / \'core/static/\'C:\\Users\\kai\\django-project\\core\\staticsettings.py
python manage.py collectstatic \nRun 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/\'\nRun Code Online (Sandbox Code Playgroud)\n现在,我们再次运行以下命令:
\n# "core/settings.py"\n\nDEBUG = False\n\nINSTALLED_APPS = [\n \'core\', # Here\n]\nRun Code Online (Sandbox Code Playgroud)\n然后输入yes并回车即可覆盖现有static文件夹:
\n\n您已请求在设置中指定的\nas目标位置收集静态文件:
\nC:\\Users\\kai\\django-project\\static
\n这将覆盖现有文件!你确定你要这么做吗?
\n输入“yes”继续,或输入“no”取消:yes
\n
现在,core.jsincore文件夹被收集到static文件夹中,如下所示:
接下来我就解释一下STATIC_URL。
STATIC_URL可以将静态文件 URL 的前目录部分设置在静态文件 URL 的主机部分和文件部分之间,如下所示。*STATIC_URL永远不会影响STATIC_ROOT:
python manage.py collectstatic \nRun Code Online (Sandbox Code Playgroud)\n例如我们设置\'static/\'为STATIC_URLinsettings.py如下图所示。*STATIC_URL适用于开发模式和生产模式DEBUG = True:DEBUG = False
| Host | Directory | File |\n | |Front | Back | |\n <-------------> <----> <-------> <------> \nhttps://www.example.com/static/admin/css/base.css\nRun 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\nRun Code Online (Sandbox Code Playgroud)\nwww.example.com并且,下面的 URL 是在with的情况下https:
Here \n <------>\nhttp://localhost:8000/static/admin/css/base.css\nRun 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\nRun 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\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
92220 次 |
| 最近记录: |