【问题标题】:Changes to /project/urls.py ignored by DjangoDjango 忽略了对 /project/urls.py 的更改
【发布时间】:2023-03-28 11:44:01
【问题描述】:

我开始从事一个成熟的 Django 项目,并注意到一些不寻常的事情。当我编辑 urls.py 时——无论是在项目级别还是在项目级别以下——Django 都会忽略我的更改。

调试已打开,所以当我收到 404 时,Django 会打印它尝试过的所有 URL 模式。从这里我看到了 在我进行更改之前的 URL 模式。

同样,这与我是编辑 /project/urls.py 还是 /project/sub/urls.py 无关。可以肯定的是,子目录 urls.py 被正确包含。

我专注于项目级别的urls.py,以防万一。

我可以对 urls.py 做一个小的更新或删除它的所有内容。 404 调试信息显示旧的 url 模式。

就好像 Django 正在查看这些 urls.py 文件的缓存版本。我应该如何进行?

【问题讨论】:

  • 你是如何运行你的 django 服务器的?您是否尝试过重启实例?
  • @Adam 我确实试过了,清除了 cookie 等。@Shawn 很好的提醒,我会试试的。
  • Django 的内置服务器(通过runserver 命令运行)自动检查代码的更新。对于任何其他服务器(包括 Django 的 testserver),您需要显式地重新加载源。如果您告诉我们您是如何为您的应用程序提供服务的,正如 Shawn Chin 所说,我们可以就如何做到这一点提供建议!
  • 同时删除“urls.pyc”。它可能无济于事,但也不会伤害。以“c”结尾的 Python 文件是原始文件的编译版本。
  • @adamnfish:从技术上讲,runserver 有一种模式,它自动检查更新;不过,他实际上不太可能在那种模式下运行它。

标签: django


【解决方案1】:

默认情况下,Django 的开发服务器(通过runserver 管理命令访问)将密切关注您的代码,并在发生变化时自行重新加载。如果您使用任何其他服务器(包括 Django 的 testserver 命令),几乎可以肯定不是这种情况。

通常,服务器会在启动时加载应用程序的源代码。需要重新加载它才能获取代码的最新副本。如果您将 Apache 与 mod_wsgi(可能是 Django 应用程序最常见的生产服务器)一起使用,那么在您的源代码树的某个位置,您将拥有一个 wsgi 应用程序文件。按照惯例,它们有一个.wsgi 扩展名,但它可以命名任何东西。该文件是 Apache 用来加载源代码的文件,mod_wsgi(仅限守护程序模式)的一个有用功能是触摸(更改修改日期)该文件足以强制服务器重新加载源代码。如果您的应用程序有一个可以编辑的 wsgi 文件,那么这样做并重新上传代码就足够了。该文件可能包含 application = django.core.handlers.wsgi.WSGIHandler() 行或类似的内容 - 这可能会对您有所帮助

如果您无权访问或找不到任何此类文件,则需要将更新的源提供给服务器管理员,并要求他们更新并重新加载源。在没有更多信息的情况下向您提供更多建议是很棘手的 - 也许您可以向服务器管理员询问更多信息,以便我们提供更多帮助?

== 更新 ==

我已经检查了您提供的链接上的响应标头,看起来您正在使用 nginx 来为该站点提供服务。不过,这可能只是另一台服务器前面的负载平衡器,所以我仍然建议向您的系统管理员询问更多信息。

【讨论】:

  • 谢谢!说得通。显然我们只是使用 Nginx 来提供静态内容,所以我运行了apache2ctl restart,并且 urls.py 更改现在正在工作。
  • 太棒了!请记住,重新启动 apache 会影响它所服务的每个网站,这可能会产生意想不到的副作用。如果你找到了 wsgi 文件(如果你正在努力追踪它,它将在该站点的 apache 配置中引用)然后触摸它会优雅地重新加载这个应用程序的源代码。
  • 对于 Apache 部署,最好使用$ sudo apache2ctl graceful 重新加载最新配置,而不会干扰当前访问者。
  • Mandx, 'graceful' restart 在使用 mod_wsgi 守护进程模式时不一定有这种影响。
  • 我遇到了似乎完全相同的问题,但建议不起作用。事实证明,Firefox 正在缓存来自旧 urls.py 配置的重定向,并且从未访问服务器。必须清除浏览器的缓存。
猜你喜欢
  • 2022-01-21
  • 2014-11-26
  • 1970-01-01
  • 2017-02-08
  • 2020-12-20
  • 2021-10-26
  • 1970-01-01
  • 2013-10-29
  • 1970-01-01
相关资源
最近更新 更多