【问题标题】:Django finds all static files except one - 404Django 找到除一个之外的所有静态文件 - 404
【发布时间】:2015-03-09 16:15:30
【问题描述】:

在我尝试添加此库之前,我的静态文件正常工作 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

【问题讨论】:

  • 如果您正在运行runservercollectstatic 将无济于事。 staticfiles 是您的 STATIC_ROOT 还是 STATICFILES_DIRS 之一?尝试将reverse.js 文件复制到dist,相应地更改脚本src 并检查是否有效。
  • 有时您可能会遇到 gif 类型的文件的问题。尝试 chmod +x 他们 :)
  • 你能发布你的.gitignore吗?
  • 另外,您是否在 urls.py 中添加了 urlpatterns = patterns('', url(r'^jsreverse/$', 'django_js_reverse.views.urls_js', name='js_reverse'), )
  • 是的,我试过了,结果相同。如果我将它用作静态文件,我不应该这样做。如果我添加该 url 模式并将我的模板更改为 {% url 'js_reverse' %} 那么它可以通过视图工作。我仍然不明白为什么找不到 satic 文件。

标签: python django django-staticfiles


【解决方案1】:

遇到同样的问题并尝试了所有方法。 js 文件的 URL 似乎是合法的,但它不是(至少使用 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'),

现在它可以正常工作了。希望这会对某人有所帮助。

【讨论】:

    【解决方案2】:

    我最近遇到了同样的问题,这是我的解决方法。

    一种可能的解决方案是将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
    

    另一种解决方案是在模板中交替使用静态文件和视图。假设您已添加 url,如 Przemysław Melnarowicz 的答案中所述,并且 SERVE_STATIC 告诉您是否从 django 应用程序 (./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 %}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-01-12
      • 2021-01-25
      • 2017-09-13
      • 2015-12-07
      • 2016-09-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多