3

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

例如:

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

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

4

2 回答 2

4

如果您指定包含名称的正则表达式,例如:

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

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

给定以下视图函数:

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
于 2013-01-20T23:17:35.953 回答
1

如果num未在 URL 中指定,则 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 作为默认值。

于 2013-01-20T22:02:02.407 回答