【问题标题】:django test client gets 404, but browser worksdjango 测试客户端得到 404,但浏览器可以工作
【发布时间】:2015-06-08 03:13:33
【问题描述】:

我可以通过我的网络浏览器 (http://127.0.0.1:8983/solr) 访问本地地址以查看 Solr Admin(搜索 webapp)。

但是,通过 Django (1.7) 测试客户端我得到:

>>> from django.test import Client  
>>> c = Client()  
>>> response = c.get('http://127.0.0.1:8983/solr')  
>>> response.status_code  
404

为什么 Django 不能连接到与我的浏览器相同的地址?

【问题讨论】:

    标签: django testing django-testing django-tests


    【解决方案1】:

    您应该向get() 提供相对网址

    c.get("/solr/") 
    

    这记录在Testing Tools 页面:

    检索页面时,请记住指定 URL 的路径,而不是 整个域。例如,这是正确的:

    c.get('/login/') 
    

    这是不正确的:

    c.get('http://www.example.com/login/')
    

    【讨论】:

    • 谢谢。虽然这可能是不好的做法,但使用带有绝对 url 的 c.get 是有效的,至少通过 ./manage.py shell 是有效的。但是,您的link to the docs 帮我找到了主要问题...“测试客户端无法检索非由您的 Django 项目提供支持的网页。如果您需要检索其他网页,请使用 Python 标准库模块比如 urllib。”
    • 谢谢!在api路径之前使用/是无效的。
    【解决方案2】:

    添加到@alecxe 的answer 您应该指定相对网址;使用reverse() 获取网址的最佳做法:

    from django.core.urlresolvers import reverse
    from django.test import Client  
    c = Client()
    
    # assuming you've named the route 'solar'   
    url = reverse('solar')
    c.get(url)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-01
      • 2014-03-13
      • 2013-07-21
      • 2020-11-02
      • 2011-01-01
      • 2013-10-07
      相关资源
      最近更新 更多