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

Python 基于类的视图中的可选url参数,python,django,django-urls,django-class-based-views,Python,Django,Django Urls,Django Class Based Views,如何使用基于类的视图为url参数创建默认值?例如,在TemplateView上 例如: url(r'^(?P<num>\d+)|/$', MyView.as_view()) url(r'^(?P\d+)|/$,MyView.as_view() 如果url中未指定num,我想将默认值设置为“4”如果url中未指定num,Django将不会在urls.py中使用该行来显示页面。您可以像这样修改URL配置以实现此目的: url(r'^$', MyView.as_view()) url(

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

例如:

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

如果url中未指定num,我想将默认值设置为“4”

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

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

它将URL中给定的值指定给
my\u URL
,否则默认为4。

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

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

你能发布一些代码来说明你正在尝试做什么吗?我强烈建议避免覆盖
get
,除非这是绝对必要的。基于类的视图提供了一系列更适合于此的方法,具体取决于您正在子类化的实际
视图
类以及您打算如何处理此参数。例如,如果需要它在
DetailView
中实例化对象,请重写
get_object
;如果您只想在模板中使用它,请使用
get_context_data
;“等等,”贝里斯拉夫洛帕克同意了。这是一件让CBV有点尴尬的事情——您需要知道覆盖哪个方法。做事情的方法不止一种,如果没有适当的经验,就不清楚应该覆盖哪种方法。
# url: /
args ()
kwargs {'num': None}

# url: /45/
args ()
kwargs {'num': u'45'}
def get(self, request, *args, **kwargs):
    num = kwargs.get('num', None)
    if num is None:
        num = 4