Django发现除了一个 - 404之外的所有静态文件

时间:2015-03-09 16:15:30

标签: python django django-staticfiles

我的静态文件正常工作,直到我尝试添加此库 https://github.com/ierror/django-js-reverse

我按照页面上的说明操作,但Django仍然无法找到新资源。

来自settings.py

STATIC_ROOT = 'staticfiles'
STATIC_URL = '/static/'

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


INSTALLED_APPS = (
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'django_js_reverse',
    ...,
)

在我的模板中

<script src="{% static 'django_js_reverse/js/reverse.js' %}"></script>

我的目录结构如下所示

staticfiles/
    admin/
    dist/
    django_js_reverse/
        js/
            reverse.js

运行后

python manage.py collectstatic
python manage.py runserver

我还尝试按照库指令运行以下内容,但没有运气

./manage.py collectstatic_js_reverse

当我尝试加载页面时,这是runserver的输出。

[08/Mar/2015 19:12:33] "GET /static/custom.css HTTP/1.1" 304 0
[08/Mar/2015 19:12:33] "GET /static/dist/css/bootstrap.min.css HTTP/1.1" 304 0
[08/Mar/2015 19:12:33] "GET /static/django_js_reverse/js/reverse.js HTTP/1.1" 404 1697
[08/Mar/2015 19:12:33] "GET /static/dist/js/bootstrap.min.js HTTP/1.1" 304 0
[08/Mar/2015 19:12:33] "GET /static/csrf.js HTTP/1.1" 304 0
[08/Mar/2015 19:12:33] "GET /static/custom.js HTTP/1.1" 304 0

我无法弄清问题在哪里。静态文件设置显然设置正确,因为所有其他文件都正常加载。我一定错过了一些明显的东西。任何帮助将不胜感激\

更新

我尝试将reverse.js文件移动到dist /但它仍然返回404。

所有文件的权限相同

ls -la staticfiles/dist/js
-rw-r--r--  1 adam  staff  67155 Mar  8 15:06 bootstrap.js
-rw-r--r--  1 adam  staff  35601 Mar  8 15:06 bootstrap.min.js
-rw-r--r--  1 adam  staff    484 Mar  8 15:06 npm.js
-rw-r--r--  1 adam  staff   3258 Mar 10 10:31 reverse.js

2 个答案:

答案 0 :(得分:2)

遇到同样的问题并尝试了一切。 Url到js文件似乎是合法的,但它不是(至少使用Django 1.9)。

我已经从

更改了它
<script src="{% static 'django_js_reverse/js/reverse.js' %}"></script>

<script src="{% url 'js_reverse' %}"></script>

此解决方案需要urls.py中的此url模式

# import view
from django_js_reverse.views import urls_js

# and add this in url patterns
url(r'^jsreverse/$', 'django_js_reverse.views.urls_js', name='js_reverse'),

现在它没有任何问题。希望这会对某人有所帮助。

答案 1 :(得分:0)

我最近遇到过同样的问题,这就是我如何解决它。

一种可能的解决方案是将reverse.js复制到静态目录中,在本例中为BASE_DIR/static/

# set the JS-reverse output to the static dir
JS_REVERSE_OUTPUT_PATH=os.path.join(BASE_DIR, 'static/')

# update the script's path
<script src="{% static 'reverse.js' %}"></script>

然后:

./manage.py collectstatic_js_reverse
./manage.py runserver # or collectstatic

另一种解决方案是在模板中静态文件和视图使用之间交替。假设您已添加了网址,如Przemysław Melnarowicz的答案中所述,SERVE_STATIC告知是否正在从django app(./manage.py runserver)提供静态文件:

{% if SERVE_STATIC %}
    {# get script from view #}
    <script src="{% url 'js_reverse' %}"></script>
{% else %}
    {# get script from static file #}
    <script src="{% static 'django_js_reverse/js/reverse.js' %}"></script>
{% endif %}