Django 上静态 STATIC_URL 和 STATIC_ROOT 之间的区别

新手上路,请多包涵

我对 static root 感到困惑,想澄清一下。

要在 Django 中提供静态文件,以下内容应位于 settings.pyurls.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. 如果有人可以解释每个设置的工作流程,那就太好了:如何收集和管理文件,以及应遵循的良好做法。

谢谢。

原文由 user993563 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 648
1 个回答

静态根目录

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

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

STATIC_URL

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

If you set STATIC_URL = 'http://static.example.com/' , then you must serve the STATIC_ROOT folder (ie "/var/www/example.com/static/" ) by apache or nginx at url 'http://static.example.com/' (so that您可以参考静态文件 '/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>

原文由 suhailvs 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题