【问题标题】:Django Static Url Error, Not LoadingDjango 静态 URL 错误,未加载
【发布时间】:2016-12-09 10:14:03
【问题描述】:

我现在对 Django (1.9) 很生气!最可悲的是“静态 URL”给我带来了问题。 'Media URL' 工作正常,没问题,但静态 url 让人头疼。

在我的 settings_dev.py 中

import os
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
PROJECT_PATH = os.path.abspath(os.path.dirname(__file__))  
STATIC_ROOT = os.path.join(PROJECT_PATH,'../static/')
STATIC_URL = '/static/'

当我添加以下标签时:

{% load static from staticfiles %}

  <script type="text/javascript" src="{% static 'datepicker/js/bootstrap-datepicker.js' %}"></script>

js 文件不会加载。当我检查我的源代码时,它会显示以下链接。

   <script type="text/javascript" src="/static/datepicker/js/bootstrap-datepicker.js"></script>

当我点击它时,它会将我重定向到

  http://127.0.0.1:8000/static/datepicker/js/bootstrap-datepicker.js

并显示

  Page not found (404)
  Request Method:   GET
  Request URL:  http://127.0.0.1:8000/static/datepicker/js/bootstrap-  datepicker.js

现在,我将 urls.py 调整为

if settings_dev.DEBUG:
    # static files (images, css, javascript, etc.)
    urlpatterns += patterns('',
        (r'^media/(?P<path>.*)$', 'django.views.static.serve', {
    'document_root': settings_dev.MEDIA_ROOT, 'show_indexes': True}),
        (r'^static/(?P<path>.*)$', 'django.views.static.serve', {
    'document_root': settings_dev.STATIC_ROOT, 'show_indexes': True}),
 )

然而,我仍然遇到同样的错误!!页面未找到问题。

项目目录

PROJECT NAME: Book/

SUB DIRECTORY: 
  media
  static
  Template
  book
  bookapp
  manage.py (this is a file)

我错过了什么?

【问题讨论】:

  • 首先,您是否使用本地 Python Django 开发服务器以外的任何其他服务器来托管您的 Web 应用程序,例如 Apache 或 NGINX?也就是说,你使用的是python manage.py collectstatic吗?
  • 你能不能给我们看看你的根目录长什么样,看看 static_url 是否真的在正确的目录中搜索静态文件?
  • @AnkushRaghuvanshi 我已经更新了问题
  • 当我运行 python manage.py collectstatic 时,它会将文件移动到 /static/ 。哪个是正确的文件夹。
  • 您是否尝试在developmentproduction 设置中运行它?

标签: python django


【解决方案1】:

好的,为您说明清楚。

STATIC_ROOT 是当您想在另一台服务器上提供文件时收集所有静态数据的目录,例如 APACHE 或 NGINX 或 Heroku 等。

如果不想只是想在本地开发服务器上运行网络应用,则不需要python manage.py collectstatic,因此不需要 STATIC_ROOT。

您只需要STATIC_URL,如果您的静态文件也位于其他位置,那么您还需要STATICFILES_DIRS = [os.path.join(BASE_DIR, "static"),]

因此,您将在基本目录级别拥有一个名为“static”的文件夹,django 将在该文件夹中查找您的静态文件。

如果您为STATIC_DIRSSTATIC_ROOT 指定相同的文件夹,那么您将自动收到错误消息。 Django 不允许你这样做,因为从技术上讲,你试图为两个不同的目的提供同一个目录。

详细解释请看这里-> Differences between STATICFILES_DIR, STATIC_ROOT and MEDIA_ROOT

【讨论】:

  • 谢谢。如果是这样的话,我的 STATIC_ROOT = os.path.join(PROJECT_PATH,'../static/') 就是对的。它应该找到它。不需要 STATIC_DIRS,因为我只有一个存储静态文件的位置。此外,我还在开发服务器中。
  • 还是不知道为什么Django找不到我的静态url
  • 您应该做的是在基本目录级别创建一个新文件夹。将其命名为 static_root_folder 。然后在你的 settings.py 中做STATIC_ROOT = os.path.join(BASE_DIR, 'static_root_folder')
  • 您的 static 文件夹和收集静态数据以提供给不是 python django 服务器的服务器的位置不应相同。因此,我只是要求您创建一个新文件夹并为其命名您想要的任何名称。然后在 STATIC_ROOT 中指定。虽然我再说一遍,当你只在本地开发服务器上工作时,你不需要 STATIC_ROOT,即 python django 服务器
  • 还是一样。我创建了一个名为 static_root 的新文件夹,调整了 STATIC_ROOT = os.path.join(BASE_DIR, 'static_root') 和 STATIC_URL = '/static_root/' 但仍然找不到相同的页面。该网址反映在模板127.0.0.1:8000/static_root/datepicker/js/…
【解决方案2】:
STATICFILES_DIRS = [os.path.join(BASE_DIR, "static"),]

该行足以为您的项目提供static 文件夹文件...而且您必须在 urls.py 中设置它

urlpatterns = [
    ...
] + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT) 

【讨论】:

  • STATIC_ROOT 仅用于部署,这意味着生产服务器...请参阅此链接...docs.djangoproject.com/en/1.10/howto/static-files/#deployment
  • 我收到此错误错误配置:STATICFILES_DIRS 设置不应包含 STATIC_ROOT 设置
  • 您必须将您的 STATIC_ROOT 更改为其他内容...例如 STATIC_ROOT='staticfiles'
猜你喜欢
  • 2021-01-12
  • 2019-12-23
  • 2019-08-31
  • 2014-11-12
  • 2021-04-03
  • 2012-01-21
  • 2016-11-06
  • 1970-01-01
相关资源
最近更新 更多