【问题标题】: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。”
-
【解决方案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)