2015-04-03 1 views
2

Я могу найти локальный адрес через мой веб-браузер (http://127.0.0.1:8983/solr), чтобы увидеть Solr Admin (search webapp).Клиент django test получает 404, но работает браузер

Однако через (1.7) тестового клиента Django я получаю:

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

Почему не Django подключиться к тому же адресу (ов) в моем браузере?

ответ

3

Вы должны предоставить Относительные URL в get():

c.get("/solr/") 

Это отражено на Testing Tools странице:

При получении страниц, помните указать путь URL, не весь домен. Например, это правильно:

c.get('/login/') 

Это неверно:

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

Спасибо. Хотя это может быть плохая практика, использование c.get с абсолютным url работает, по крайней мере, через оболочку ./manage.py. Тем не менее, ваша [ссылка на документы] (https://docs.djangoproject.com/en/1.7/topics/testing/tools/) помогла мне найти основную проблему ... «Тестовый клиент не может получить Web страниц, которые не включены в проект Django. Если вам нужно получить другие веб-страницы, используйте стандартный библиотечный модуль Python, такой как urllib. " – ZG101

+0

@ ZG101 правильная точка, спасибо за обмен. – alecxe

1

Добавление к @ 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)