我的静态文件正常工作,直到我尝试添加此库 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
答案 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 %}