这是我的view.py文件
from django.http import HttpResponse, HttpResponseRedirect, HttpResponseNotFound, Http404, HttpResponsePermanentRedirect
from django.urls import reverse
from django.shortcuts import render
articles = {
'sports': 'sports page',
'finance' : 'finance page',
'tech' : 'tech page',
}
def home_view(request):
return HttpResponse("My App Home Page")
def news_view(request, topic):
try:
result = articles[topic]
return HttpResponse(result)
except:
raise Http404("404 Generic view error")
def mul_view(request,num1,num2):
num_result = num1 * num2
result = f"{num1} * {num2} = {num_result}"
return HttpResponse(str(result))
def num_page_view(request, num_page):
topic_list = list(articles.keys())
topic = topic_list[num_page]
return HttpResponseRedirect(topic)
这是我的应用程序的网址文件
from django.urls import path
from . import views
urlpatterns = [
path('<int:num_page>/', views.num_page_view, name='num_page'),
# path('', views.home_view, name='home'),
path('<topic>/', views.news_view, name='topic-page'),
path('<int:num1>/<int:num2>/', views.mul_view, name='multiply'),
]
这里发生的事情对我来说有点难以解释,因为英语不是我的母语 但这是我最大的努力。
我创建了一个函数 num_page_view ,它接受一个数字作为参数,并具有文章字典所有键的列表,然后将数字作为索引提供给列表并存储到变量 topic 中,然后将其作为输出发送到HttpResponseRedirect
然后我添加了一个新路径,该路径获取指向 num_page_view 的链接,但不是将其重定向到主题,而是将整数与主题的 url 连接起来
例如。
我的_应用程序/1/ 应该返回 my_app/finance 但相反,它将该数字连接到 url 并使其成为 my_app/1/finance 即使我使用 HttpResponseRedirect ,逻辑上应该返回我通过主题变量提供的给定 url 名称
这是因为它重定向到
finance
,这是一个相对路径,所以它会 append finance/
到 URL。
您可以使用:
def num_page_view(request, num_page):
topic_list = list(articles.keys())
topic = topic_list[num_page]
return HttpResponseRedirect(f'/my_app/{topic}')
redirect(…)
[Django-doc]:
from django.shortcuts import redirect
def num_page_view(request, num_page):
topic_list = list(articles.keys())
topic = topic_list[num_page]
return redirect('topic-page', topic=topic)