一尘不染

Django上静态STATIC_URL和STATIC_ROOT的区别

django

我被弄糊涂了static root,想澄清一下。

要在Django中提供静态文件,以下代码应位于settings.py和中urls.py

import os
PROJECT_DIR=os.path.dirname(__file__)

1.收集静态文件的目录的绝对路径

STATIC_ROOT= os.path.join(PROJECT_DIR,'static_media/')

2.静态文件的URL前缀

STATIC_URL = '/static/'

3.静态文件的其他位置

STATICFILES_DIRS = ( os.path.join(PROJECT_DIR,'static/'),)

…以及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}
))

4.我们也使用 python manage.py collectstatic
问题:

  1. 谁能向我解释工作流程:理想情况下应该如何做。到目前为止,我将上述代码段复制/粘贴到它们的指定位置,然后继续在静态目录中创建新文件,并且可以正常工作。settings.STATIC_ROOT但是,在我的文章中,我指向了另一个目录。

  2. 如果有人可以解释每种设置的工作流程,那就太好了:文件的收集和管理方式以及遵循的最佳做法是什么。

谢谢。


阅读 607

收藏
2020-03-27

共1个答案

一尘不染

STATIC_ROOT

./manage.py collectstatic将收集静态文件以进行部署的目录的绝对路径。 例:STATIC_ROOT="/var/www/example.com/static/"

现在,该命令./manage.py collectstatic会将所有静态文件(即,应用程序中的静态文件夹中的所有路径中的静态文件)复制到该目录/var/www/example.com/static/。现在你只需要在apache或nginx..etc上提供此目录。

STATIC_URL

在URL其中的静态文件STATIC_ROOT目录供应(由Apache或nginx..etc)。 示例:/static/http://static.example.com/

如果设置了STATIC_URL = 'http://static.example.com/’,那么你就必须服务于STATIC_ROOT文件夹(即"/var/www/example.com/static/"通过在URL Apache或nginx的), 'http://static.example.com/’(这样你可以参考静态文件'/var/www/example.com/static/jquery.js''http://static.example.com/jquery.js'

现在,在你的django模板中,可以通过以下方式引用它:

{% load static %}
<script src="{% static "jquery.js" %}"></script>

它将呈现:

<script src="http://static.example.com/jquery.js"></script>
2020-03-27