如何在Django视图中传递可选参数

28

我有一个视图中的函数如下:

def  calculate(request , b)

即使未传递 b 参数,我希望该函数也能正常工作。

4个回答

74

您可能还需要更新URL分发程序,以处理具有或不具有可选参数的请求。

url(r'^calculate/?(?P<b>\d+)?/?$', 'calculate', name='calculate'),  
url(r'^calculate/$', 'calculate', name='calculate'),
如果您通过URL传递b,则会命中第一个URL定义。如果您不包括可选参数,则会命中第二个定义,但是进入相同的视图并使用您提供的默认值。

15
我认为这是答案中最重要的部分。 - Tomas Tomecek
1
你可以在 reverse('calculate', ...) 中同时使用这两个定义吗? - naktinis
1
是的,您可以将args和kwargs作为属性传递给reverse方法。 - vjimw
1
非常正确!或者,由于需要定义两个不同的URL,您可能希望在URL本身中指定缺少参数的默认值,以便将所有决策集中在一个地方:url(r'^calculate/$', 'calculate', {'b': 3}, name='calculate'), - Mario Orlandi

32

13

将默认值传递给方法可以使参数变为可选。

在您的情况下,您可以这样做:

def calculate(request, b=None)
    pass

然后在你的模板中,你可以使用条件语句来实现不同的行为:

{% if b %}
    Case A
{% else %}
    Case B
{% endif %}

0
def calculate(request, b=None)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接