Тип конвертера 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, но безуспешно.

Для меня это кажется очень случайной проблемой, которая, вероятно, никогда не повторится, но она постоянна, и ошибка остается после всех обычных перезагрузок системы. Что я упускаю?

Вернуться на верх