Django:IE无法加载本地主机或加载非常缓慢。

8
我刚开始学习Django,正在我的电脑上构建一个项目,运行的是Windows 7 64位、Python 2.7和Django 1.3。
基本上,我写的任何内容都可以在Chrome和Firefox中立即加载。但是对于IE(版本9),它只会停留在那里,什么也不做。我可以在IE上加载"http://127.0.0.1:8000"并让电脑开着几个小时,但它却无法加载。有时,当我刷新几次或重新启动IE后,它才能工作。如果我改变了代码中的某些东西,Chrome和Firefox会立即反映出这些更改,而IE则不会 - 如果它根本就能加载该页面的话。
到底是怎么回事?我在这里快疯了...

我不确定是什么原因导致IE表现出这种方式,但我看到过完全相同的行为。我在Linux上开发,进行跨平台测试时,在特定的IP:8000上运行dev服务器。我注意到IE会发出几个请求,然后停止。我会重新启动dev服务器,然后它又能工作几个请求。 - Brandon Taylor
在我的 Mac(Mountain Lion)上,我只能使用 Chrome 开发服务器,在 Firefox 和 Safari 上会卡住 :( - daveoncode
5个回答

3

可能与这个问题相关: https://code.djangoproject.com/ticket/16099

本质上,开发服务器不是多线程的,如果浏览器打开一个连接然后尝试第二个连接来获取数据,它可能会永远挂起。

编辑:

此外,请参见此问题: https://code.djangoproject.com/ticket/15178

如果您能提供重现此问题的方法,我们可能可以找到解决方法。

此外,如果您可以尝试最新的开发版本并查看是否修复了该问题,我们最近提交了一个新补丁,增加了多线程功能到runserver命令。


我认为这正是问题所在。一旦关闭其他浏览器,并且只使用IE打开开发服务器上的页面,它每次都可以正常工作。但它仍然比Chrome或Firefox慢一点…但我猜我只能接受它了。 - reedvoid
我已经提交了15178号工单,并确认使用多线程开发服务器可以解决此问题。修复在修订版16427中。 - Catalin Iacob

0
我也遇到了这个问题,这个解决方法可以修复它。只适用于Django <= 1.3
http://nedbatchelder.com/blog/201103/quick_and_dirty_multithreaded_django_dev_server.html @Andrew Barber 编辑 总结/我是怎么做到的: 创建一个名为managec.py(c=concurrent)的文件 将以下代码粘贴到其中:
#!/usr/bin/env python
# 
# A clone of manage.py, with multi-threadedness monkeypatched in.

import os, sys
from django.core.management import execute_manager
try:
    import settings # Assumed to be in the same directory.
except ImportError:
    sys.stderr.write(
        "Error: Can't find the file 'settings.py' in the directory containing %r. "
        "It appears you've customized things.\n"
        "You'll have to run django-admin.py, passing it your settings module.\n"
        "(If the file settings.py does indeed exist, it's causing an ImportError somehow.)\n" 
        % __file__
        )
    sys.exit(1)

def monkey_patch_for_multi_threaded():
    # This monkey-patches BaseHTTPServer to create a base HTTPServer class that 
    # supports multithreading 
    import BaseHTTPServer, SocketServer 
    OriginalHTTPServer = BaseHTTPServer.HTTPServer

    class ThreadedHTTPServer(SocketServer.ThreadingMixIn, OriginalHTTPServer): 
        def __init__(self, server_address, RequestHandlerClass=None): 
            OriginalHTTPServer.__init__(self, server_address, RequestHandlerClass) 

    BaseHTTPServer.HTTPServer = ThreadedHTTPServer

if __name__ == "__main__":
    monkey_patch_for_multi_threaded()
    execute_manager(settings)


使用 ./managec.py runserver 8080(或您使用的任何端口)启动开发服务器
享受 :)


2
你能在这里总结一下答案吗? - Andrew Barber

0
我正在使用Windows 7,64位,django 1.3,py 2.6进行开发,并且我总是在IE,Firefox,Safari和Chrome中检查Dev服务器的功能。我的最新系统上有IE9,而我的旧系统上有IE8。我还注意到了挂起的问题。我发现当我使用127.0.0.1:8000时,它会挂起并需要刷新才能使其正常工作。如果我使用我的开发服务器的特定IP地址启动Dev服务器,则问题似乎已经解决。例如python manage.py runserver 192.168.1.134:8000
这似乎是IE9非常特定的问题。如果你在谷歌上搜索,会发现更多的人遇到了这个问题。

0

我不确定你是否和我有相同的问题。但是我在IE9上也遇到了相同的白屏问题,显然是由于html标签“fieldset”隐藏了我的表单所致。

尝试验证你的html代码或检查html标签与IE9的兼容性。希望这可以帮到你。


0
有时候会发生一些异常代码,比如在 HttpResponse 之前获取用户输入的代码行。删除那段代码并刷新服务器,它会像魔法般地工作。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接