Django представление не содержит заголовок HTTP_REFERRER - PullRequest
0 голосов
/ 10 января 2020

Я тестирую представление, которое обращается к 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}
        )

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...