带有HttpResponseRedirect的Django可选视图参数

时间:2013-10-24 02:00:03

标签: python django django-views

所以我有一个视图从查询中抓取一个人的信息并将信息返回到页面:

def film_chart_view(request, if_random = False):

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

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

但是,我希望第一个视图能够识别它是否来自第二个视图,因此如果是,则将if_random参数设置为True,但我并不确定如何做到这一点。

我的网址:

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

1 个答案:

答案 0 :(得分:3)

您不必将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 para是可选的,我建议你为film_chart_view编写2个独立的模式。(实际上你可以将这两个模式组合成一个具有更复杂的regex expr但可读性很重要的模式。)

URL配置:

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
    )

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

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