Я тестирую представление, которое обращается к request.META
, где я хочу получить заголовок HTTP_REFERRER
. Я хочу перенаправить на предыдущую страницу, если набор запросов в представлении search_list возвращается пустым. Ссылочная страница содержит форму, которая отправляется через запрос GET
. Очищенные данные затем передаются в search_list
в виде строки запроса.
При тестировании представления все тестовые утверждения проходят. Однако, когда я python manage.py runserver
и симулирую контрольный пример, я получаю ошибку: KeyError at /minerals/search; 'HTTP_REFERRER'
. Я пытаюсь понять, почему я получаю KeyError при запуске сервера?
Я пытался использовать HTTP_REFERER и HTTP_REFERRER для ключей, но оба сбоя.
Также отметим это:
Internal Server Error: /minerals/search/
"GET /minerals/search/?query=Kryptonite HTTP/1.1" 500
test_views.py
class SearchFormResults(TestCase):
def test_user_search_query_fail(self):
response = self.client.get(
reverse("minerals:search_list"), data={'query': 'Kryptonite'},
HTTP_REFERRER=reverse(
"minerals:letter_list", kwargs={'query': 'N'}
), follow=True
)
self.assertRedirects(response, reverse(
"minerals:letter_list", kwargs={'query': 'N'}
)
)
self.assertTemplateUsed("minerals/list.html")
self.assertEqual(response.status_code, 200)
self.assertContains(response, "No minerals exist with the provided search.")
views.py
def search_list(request):
search_query = request.GET.get('query')
matched_minerals = Mineral.objects.filter(
Q(name__icontains=search_query)|
Q(image_caption__icontains=search_query)|
Q(category__icontains=search_query)|
Q(formula__icontains=search_query)|
Q(strunz_classification__icontains=search_query)|
Q(crystal_system__icontains=search_query)|
Q(unit_cell__icontains=search_query)|
Q(color__icontains=search_query)|
Q(crystal_symmetry__icontains=search_query)|
Q(cleavage__icontains=search_query)|
Q(mohs_scale_hardness__icontains=search_query)|
Q(luster__icontains=search_query)|
Q(streak__icontains=search_query)|
Q(diaphaneity__icontains=search_query)|
Q(optical_properties__icontains=search_query)|
Q(group__icontains=search_query)
)
if not matched_minerals:
messages.info(request, "No minerals exist with the provided search.")
previous_page = request.META["HTTP_REFERRER"]
return HttpResponseRedirect(previous_page)
else:
search_form = SearchForm()
return render(
request, 'minerals/list.html',
{'minerals': matched_minerals, 'form': search_form}
)