Django 不反映对 urls.py 的更改

Posted

技术标签:

【中文标题】Django 不反映对 urls.py 的更改【英文标题】:Django not reflecting changes to urls.py 【发布时间】:2014-11-26 11:11:01 【问题描述】:

我正在为一个运行在 nginx 服务器上的 Django 站点设置登录系统。我得到以下调试 404 页面:

Using the URLconf defined in it.urls, Django tried these URL patterns, in this order:
^admin/
^login/ [name='main_login']
^$ [name='index']
^laptops/
^assets/
^mardes/
^users/
^jobs/
^static\/(?P<path>.*)$
The current URL, account/login/, didn't match any of these.

这似乎使用的是旧版本的 it.urls 文件;当前的看起来像这样:

from django.contrib.staticfiles.urls import staticfiles_urlpatterns
from django.conf.urls import patterns, include, url
from django.views.generic import TemplateView
from django.contrib import admin
admin.autodiscover()

urlpatterns = patterns('',
    url(r'^admin/',   include(admin.site.urls)                                          ),
    url(r'^account/', include('account.urls', namespace='account'), name='account'      ),
    url(r'^laptops/', include('laptops.urls', namespace='laptops')                      ),
    url(r'^assets/',  include('assets.urls',  namespace='assets')                       ),
    url(r'^mardes/',  include('mardes.urls',  namespace='mardes')                       ),
    url(r'^users/',   include('users.urls',   namespace='users')                        ),
    url(r'^jobs/',    include('jobs.urls',    namespace='jobs')                         ),
    url(r'^',        TemplateView.as_view(template_name='it/index.html'), name='index'  ),
) + staticfiles_urlpatterns()

如您所见,它没有 r'^login/' 模式。

我已在我的 settings.py 文件中将 LOGIN_URL 设置为“/account/login/”,但是 @login_required 装饰器正在加载“/login/”。当我在 @login_required 调用中指定 login_url='/account/login' 时,新的 url 也会被忽略。

我已经重新启动了 Nginx(通过启动和停止,以及运行“重新启动”),这并没有什么不同。我还在 nginx.conf 文件中设置了“sendfile=off”。我猜有缓存存储在某处(回复:How to clear the cache of nginx?)。

如果您需要更多详细信息,请告诉我。

【问题讨论】:

您是否尝试过删除所有pyc 文件? find . -name \*.pyc -type f -delete @michaelb 是的,我确实尝试过,不幸的是没有改变 你是如何运行 django 服务器的?通过 uwsgi...? @michaelb 是的,忘记了,谢谢 【参考方案1】:

Nginx 不单独运行 Django,但它应该与 uwsgi 或 gunicorn 等 wsgi 应用服务器交互。

也许你应该重新启动 wsgi 应用服务器而不是 nginx。

【讨论】:

【参考方案2】:

很好的捕获@bcvery1。同样对于那些通过乘客运行 django 应用程序的人,重新启动 nginx 或重新创建 restart.txt 文件也应该可以看到这些更改。

【讨论】:

以上是关于Django 不反映对 urls.py 的更改的主要内容,如果未能解决你的问题,请参考以下文章

Django 忽略对 urls.py 的更新

python+django 更改了urls.py 之后runserver报错的解决办法

Django

4.对urls.py的解释

如果在 django 的 urls.py 中找不到,则将任何 url 重定向到 404.html

Django 1.7 现在更改了模板的名称 TemplateDoesNotExist 错误