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.
Ожидается
- ввести
/my_app/0
- перенаправить на
/my_app/index/
Но...
- enter
my_app/0
- url автоматически изменяется на
my_app/0/
- не могу перенаправить на страницу, поэтому получаю ошибку
Я столкнулся с той же проблемой. Вот обходной путь
- В urls.py добавьте косую черту
urlpatterns = [ path('int:num_page/', views.num_page_view) ]
- В файле 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}')