django static static url static root

时间:2011-12-31 11:49:00

标签: django django-urls

我对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. 如果有人可以解释每个设置的工作流程,那将会很棒:如何收集和管理文件,以及要遵循的良好做法。

  3. 感谢。

3 个答案:

答案 0 :(得分:67)

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/',则必须通过apache STATIC_ROOT的apache或nginx提供"/var/www/example.com/static/"文件夹(即'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>

将呈现:

<script src="http://static.example.com/jquery.js"></script>

答案 1 :(得分:26)

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 /'通常很好,它只是静态文件的前缀。

答案 2 :(得分:0)

以上所有答案都很有帮助,但没有一个解决了我的问题。在生产文件中,我的STATIC_URL为https://<URL>/static,并且在我的dev settings.py文件中使用了相同的STATIC_URL。

这将导致django / conf / urls / static.py中出现静默故障。

测试elif not settings.DEBUG or '://' in prefix: 在网址中选择“ //”,并且不添加静态网址格式,从而导致找不到静态文件。

如果Django吐出一条错误消息,说明您不能将http(s)://DEBUG = True一起使用,那会很周到。

我必须将STATIC_URL更改为“ / static /”