Django HTTPResponseRedirect 不重定向到 url,而是将整数添加到 url

问题描述 投票:0回答:1

这是我的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 名称

python django http
1个回答
0
投票

这是因为它重定向到

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)
© www.soinside.com 2019 - 2024. All rights reserved.