Skip to main content
 首页 » 编程设计

python之带有 HttpResponseRedirect 的 Django 可选 View 参数

2024年08月28日29bluestorm

所以我有一个 View 可以从查询中获取一个人的信息并将信息返回到页面:

def film_chart_view(request, if_random = False): 

我还有一个 View 随机抓取一个人的信息并将其重定向到上面的 View :

def random_person(request): 
         . 
         . 
      return HttpResponseRedirect(reverse('home.views.film_chart_view')+"?q="+get_person.short) 

但是,我希望第一个 View 能够识别它是否来自第二个 View ,如果是,它会将 if_random 参数设置为 True,但我不确定该怎么做。

我的网址:

url(r'^film_chart_view/$', 'home.views.film_chart_view'), 
url(r'^random/$', 'home.views.random_person'), 

请您参考如下方法:

您不必将 if_random 作为 url 参数传递。

def random_person(request): 
    return HttpResponseRedirect( 
        reverse('home.views.film_chart_view') + \ 
        "?q=" + get_person.short + \ 
        "&is_random=1" 
    ) 
 
def film_chart_view(request): 
    is_random = 'is_random 'in request.GET 

但如果您更喜欢 url 参数,解决方案会稍微复杂一些。

传递给 View 函数的参数来自url模式,你需要先设置它们。

因为 is_random 参数是可选的,所以我建议您为 film_chart_view 编写 2 个单独的模式。(实际上您可以将这 2 个模式组合成一个具有更复杂的正则表达式表达式的模式,但可读性很重要。)

网址配置:

url(r'^film_chart_view/$', 'home.views.film_chart_view', name ='film_chart_view'), 
url(r'^film_chart_view/(?P<is_random>.*)/$', 'home.views.film_chart_view', name ='film_chart_view_random'), 
url(r'^random/$', 'home.views.random_person'), 
 
 
def random_person(request): 
    return HttpResponseRedirect( 
        reverse('home.views.film_chart_view', kwargs={'is_random': '1'}) + \ 
        "?q=" + get_person.short 
    ) 

View 参数(请求除外)始终是字符串,您需要在代码中将其转换为 int/bool/...。

def film_chart_view(request, is_random=None): 
    if is_random: 
        ...