基于类的视图中的可选url参数

时间:2013-01-20 21:23:55

标签: python django django-urls django-class-based-views

如何使用基于类的视图为url参数创建默认值?例如,TemplateView

例如:

url(r'^(?P<num>\d+)|/$', MyView.as_view())

如果在url中未指定num,我想设置默认值'4'

2 个答案:

答案 0 :(得分:3)

如果指定包含以下名称的正则表达式:

url(r'^(?P<num>\d+)|/$', MyView.as_view())

然后num将始终作为关键字参数传递给您的视图函数。如果正则表达式匹配但没有num匹配,则num将作为“无”传递给您的视图。

给出以下视图功能:

def get(self, request, *args, **kwargs):
    print 'args %s' % repr(args)
    print 'kwargs %s' % repr(kwargs)

runserver打印的输出如下:

# url: /
args ()
kwargs {'num': None}

# url: /45/
args ()
kwargs {'num': u'45'}

由您来检测None值并根据需要指定默认值。

def get(self, request, *args, **kwargs):
    num = kwargs.get('num', None)
    if num is None:
        num = 4

答案 1 :(得分:1)

如果未在URL中指定num,则Django将不会在urls.py中使用该行来显示页面。您可以像这样修改URL配置以实现此目的:

url(r'^$', MyView.as_view())
url(r'^(?P<num>\d+)|/$', MyView.as_view())

MyView中,您可以通过执行以下操作获取参数:

def get(self, request, *args, **kwargs):
    my_url = request.GET.get('url', 4)

将URL中指定的值指定为my_url或4作为默认值。