Django:连接路径位于基本路径组件之外

时间:2016-12-27 18:27:28

标签: python django django-staticfiles

我正在使用Django 10,我不知道为什么在我成功收集我的静态文件之后,当我尝试在部署模式下运行服务器(debug = False)时,它会发生在我这样的事情:

当我通过执行以下操作查找静态文件时:python manage.py findstatic /static/mysite/js/javascript.js

django.core.exceptions.SuspiciousFileOperation: The joined path (/static/mysite/js/javascript.js) is located outside of the base path component (/home/xxxx/.venvs/mysite/local/lib/python2.7/site-packages/django/contrib/admin/static)

我使用虚拟env'mysite'来运行它。

settings.py 中:

STATIC_URL = '/static/'

STATIC_ROOT = os.path.join(BASE_DIR, "static") (i tried also just only 'static')

MEDIA_ROOT = BASE_DIR + '/mysite/media'

MEDIA_URL = '/media/'

我的 urls.py

urlpatterns = [   
    url(r'', include('mysite.urls')),
]

urlpatterns += staticfiles_urlpatterns()

这对我来说是新的,我也已经有一个django网站,它从来没有出现过这样的错误。为什么不考虑我的STATIC_ROOT路径?另一方面,collectstatic工作正常。如果我使用调试的runserver,它就像魅力一样。

1 个答案:

答案 0 :(得分:2)

static的位置参数是您传递给python manage.py findstatic mysite/js/javascript.js 以在模板中呈现特定静态文件的参数。您看到的错误是因为您使用了绝对路径,而不是您将传递给模板中{% static 'mysite/js/javascript.js' %} 函数的参数。你确定你的意思不是:

python manage.py findstatic js/javascript.js

用于

引用的文件
{% static 'js/javascript.js' %}

usage: manage.py findstatic [-h] [--version] [-v {0,1,2,3}]
                            [--settings SETTINGS] [--pythonpath PYTHONPATH]
                            [--traceback] [--no-color] [--first]
                            staticfile [staticfile ...]

Finds the absolute paths for the given static file(s).

positional arguments:   staticfile

用于

引用的文件
location /static {
    root /path/to/django;
}

供您参考:

STATIC_ROOT

n.b。,django的staticfiles应用程序是not supposed to be used in production。在生产中,您应该使用Web服务器来提供基于静态文件的服务。例如,对于nginx,您将包括a block like this

{{1}}

要调试静态文件,请在运行collectstatic后检查{{1}}目录,并确保文件存在。如果是,请确保您的Web服务器配置为正确提供静态文件目录。