如何使用基于类的视图为url参数创建默认值?例如,TemplateView
例如:
url(r'^(?P<num>\d+)|/$', MyView.as_view())
如果在url中未指定num,我想设置默认值'4'
答案 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作为默认值。