Django не может точно распознать 0,1,2 в url


my_app/views.py

from django.http import HttpResponse,HttpResponseRedirect


articles = {
    'index' : "Hello this is a view inside my_app",
    'simple' : 'simple views',
    'sports' : 'Sports Page',
    'finance' : 'Finance Page',
    'politics' : "Politics Page"
}

def news_view(request, topic) :
    try :
        return HttpResponse(articles[topic]) 
    except:
        raise Http404("404 GENERIC ERROR") 

def num_page_view(request,num):
    topics_list = list(articles.keys())
    topic = topics_list[num]
   
    return HttpResponseRedirect(topic)
my_app/urls.py

from django.urls import path
from . import views



urlpatterns = [
    path('<int:num>',views.num_page_view),
    path('<str:topic>/',views.news_view),
]

когда я набираю /my_app/0, django автоматически изменяет 0 0/, поэтому я думаю, что Django не может распознать, что параметр этой страницы является чистым int. Это продолжается до тех пор, пока я не наберу 0,1,2

Но когда я ввожу больше 2 (например, /my_app/3), все работает так, как я задумал (1. ввести /my_app/3 2. перенаправить на /my_app/finance/)

Я не знаю, почему Django распознает параметр int больше 2, но не 0,1,2.

Ожидается

  1. ввести /my_app/0
  2. перенаправить на /my_app/index/

Но...

  1. enter my_app/0
  2. url автоматически изменяется на my_app/0/
  3. не могу перенаправить на страницу, поэтому получаю ошибку

Я столкнулся с той же проблемой. Вот обходной путь

  1. В urls.py добавьте косую черту

urlpatterns = [ path('int:num_page/', views.num_page_view) ]

  1. В файле views.py

Блочная цитата

 def num_page_view(request, num_page):
        topics_list = list(articles.keys())
        topic = topics_list[int(num_page)]
        return HttpResponseRedirect(f'/first_app/{topic}')
Вернуться на верх