【问题标题】:Django: How to use static files (simple case, jquery)Django:如何使用静态文件(简单案例,jquery)
【发布时间】:2011-08-23 20:30:50
【问题描述】:

我正在尝试在 Django 站点上使用 jQuery。我需要包含 jQuery.js 库。我已经阅读了很多关于 Django 静态文件的内容,但我认为没有人问过这个特定的问题。我只提供三个静态文件:jquery.js、anothersmallfile.js 和styles.css。关于静态文件服务的 Django 文档说:

“对于小型项目,这没什么大不了的,因为您可以将静态文件保存在 Web 服务器可以找到的地方。link

我想“将它们保存在我的网络服务器可以找到它们的地方”,因为 Django 文档在其他地方清楚地声明(警告)他们的静态文件服务方法仅适用于开发环境。我只有几个静态文件,我只想要最简单的安全解决方案。

不幸的是,我无法让它工作。无论我把文件放在哪里,Django 都找不到它们。通过 Chrome Web 开发者控制台进行调试,我发现我收到 404 错误:

GET http://127.0.0.1:8000/templates/polls/jquery.js 404 (NOT FOUND)

我是运行服务器的新手。我是否 A.) 需要告诉我的 urls.py 文件在哪里可以找到静态文件?或者问题可能是 B.) 我误解了这个问题 - Django is 我的网络服务器(用于生产)所以现在我 必须 使用 Django 静态文件解决方案?

让我的模板简单地识别与它们位于同一目录中的 .js 文件似乎并不难。我错过了什么吗?

编辑,在我得到更多的反对之前:我正在谈论上面链接页面中的这段话:

/////////////////////

Django 开发人员主要关心 Web 应用程序的动态部分——为每个请求重新呈现的视图和模板。但是 Web 应用程序还有其他部分:呈现完整网页所需的静态文件(图像、CSS、Javascript 等)。

对于小型项目,这没什么大不了的,因为您可以将静态文件保存在 Web 服务器可以找到的地方。 但是,在更大的项目中——尤其是那些由多个应用程序组成的项目——处理每个应用程序提供的多组静态文件开始变得棘手。

这就是 django.contrib.staticfiles 的用途:它将您的每个应用程序(以及您指定的任何其他位置)的静态文件收集到一个可以在生产中轻松提供的位置。

///////////////// 重点加了

如果这就是 django.contrib.staticfiles 的用途,那么更简单的解决方案是什么?我认为这是对先前问题的重复。

【问题讨论】:

  • 当你说 Django 是你的网络服务器时,这是否意味着你正在使用manage.py runserver 作为你的生产服务器?如果是这样,您可能应该更改它,因为文档说它不应该以这种方式使用:docs.djangoproject.com/en/1.3/intro/tutorial01/…
  • 重复了大约十亿个以前的问题。
  • 我还没有生产服务器,我只是想让它工作。因为我的静态文件需求非常简单,所以我希望我可以使用“因为您可以将静态文件保存在您的 Web 服务器可以找到的地方”所暗示的任何内容,而不是我需要在生产中更改的复杂解决方案无论如何。

标签: django static-files


【解决方案1】:

您需要更仔细地阅读该文档。该警告适用于生产。在开发中,你确实使用了那个静态服务方法,即将它放在你的urls.py中。而且,该文档还将显示模板目录不是放置它们的正确位置:单独的静态或媒体目录是。

评论后编辑我真的不明白你的评论。您可以通过静态服务视图在开发中执行此操作,或者使用您的生产服务器。但是你说你没有生产服务器。当你得到一个,无论是 Apache 还是 Nginx 或其他什么,你将你的静态文件放在一个目录中,并告诉该服务器从那里提供文件。这简单的解决方案。与您引用的文档中完全相同的静态文件应用程序适用于当您在不同应用程序中拥有大量文件时(它简化了从开发到生产的迁移,而不是像您想象的那样复杂化)。

【讨论】:

  • 我在我的问题中重申了这一事实。澄清:我不知道如何从开发到生产,如果我可以消除我想要的过渡中的任何复杂性。我特别询问了我确实阅读过的文档中提到的简单解决方案。如果您告诉我不存在这样的解决方案,那么我没有错,文档是。
【解决方案2】:

假设您的应用是 www。

  1. setting.py -> STATIC_ROOT = 'static/'
  2. 制作目录 www/static
  3. 制作文件 www/static/some.html
  4. 在浏览器 localhost:8000/static/some.html 中

就是这样。

【讨论】:

  • 并确保使用 ./manage.py collectstatics 进行生产级部署 - 生产服务器不会为静态文件调用 django 调度程序,因为直接为它们提供服务更快。
猜你喜欢
  • 2014-08-29
  • 1970-01-01
  • 2012-11-10
  • 2012-01-23
  • 2019-03-05
  • 1970-01-01
  • 2014-06-12
  • 1970-01-01
  • 2012-10-29
相关资源
最近更新 更多