Тип конвертера Django работает для значений >= 2, но не для 0 или 1
Я изучаю курс Django на Udemy и столкнулся с этой проблемой при попытке использовать HttpResponseRedirect для самых простых задач.
views.py выглядит следующим образом:
from django.shortcuts import render
from django.http.response import HttpResponse, HttpResponseNotFound, Http404, HttpResponseRedirect
from django.urls import reverse
articles = {
'food': 'Food page',
'politics': 'Politics page',
'sports': 'Sports page',
'finance': 'Finance page',
}
def news_view(request, topic):
try:
result = articles[topic]
return HttpResponse(result)
except KeyError:
print(type(topic))
raise Http404('404 GENERIC ERROR')
# else:
# articles[topic] = f"{(topic.title())} page"
# return HttpResponse(articles[topic])
def add_view(request, num1, num2):
# domain.com/first_app/3/4 --> 7
result = num1 + num2
return HttpResponse(str(result))
# domain.com/first_app/0 --> food
def num_page_view(request, num):
topics_list = list(articles.keys())
topic = topics_list[int(num)]
return HttpResponseRedirect(reverse('topic-page', args=[topic]))
urls.py выглядит следующим образом:
from django.urls import path
from . import views
# first_app/
urlpatterns = [
# path('<int:num1>/<int:num2>/', views.add_view),
path('<int:num>', views.num_page_view),
path('<str:topic>/', views.news_view, name='topic-page'),
]
Я попробовал ввести все индексы в браузере, 1 за 1, и получил ожидаемый результат для всего, что выше 1:
http://127.0.0.1:8000/first_app/2 правильно перенаправляет на http://127.0.0.1:8000/first_app/sports/ и так далее до 8 (я не заполнял словарь более чем 8 парами).
http://127.0.0.1:8000/first_app/0 и http://127.0.0.1:8000/first_app/1 возвращают пользовательский 404, встроенный в функцию "news_view", а сообщение в браузере выглядит так:
Используя URLconf, определенный в my_site.urls, Django попробовал эти шаблоны URL, в таком порядке:
admin/ first_app/ int:num first_app/ str:topic/ [name='topic-page']. Текущий путь, first_app/0/, совпал с последним.
Поэтому я подумал, что тип для 0 и 1 не возвращается правильно в какой-то момент, а также почему у меня есть "topics_list[int(num)]", чтобы попытаться привести его к int, но безуспешно.
Для меня это кажется очень случайной проблемой, которая, вероятно, никогда не повторится, но она постоянна, и ошибка остается после всех обычных перезагрузок системы. Что я упускаю?