Что не так с моей функцией?
get_object_or_404() (source)
Найти один объект, если не найден то показать 404
У вас на поиске Heading, не находит его и выдаёт исключение (raise Http404), дальше не идёт выполнение кода. Так же будет ошибка если в базе найдётся больше одного объекта. Тоже выплюнет исключение в 404.
Если у вас находится Heading со значением praktika-python и для этого Heading нет статей, то дальше происходит попытка получить тег с названием praktika-python. Так как тег у вас называется python, то очевидно, что тут 404.
Если вы просто вбиваете тег python, то 404 уже на строкеhead_id = get_object_or_404(Heading, heading_alies=alies)
PS.
Вот так не надо писать, вы получаете head, а не head_idhead_id = get_object_or_404(Heading, heading_alies=alies)
правильноheading = get_object_or_404(Heading, heading_alies=alies)