Django - URL 中的正则表达式可选函数参数
Django - regex optional function parameters in URL
我现在开始使用 Django(已经有相当多的 Python 知识,以及其他语言)。我想知道是否可以通过 url 将可选参数传递给视图(输入某个 url 时调用的函数)。我有:
url(regex=r'^bydate/year=(?P<year>[0-9]+)_month=(?P<month>[0-9]+)_day=(?P<day>[0-9]+)/$', view=views.question_by_date, name='question_by_date')
所以,换句话说,如果 url 的结尾看起来像这样,例如:
...bydate/year=2001_month=11_day=2/
然后调用question_by_date
函数,函数签名如下:
question_by_date(request, **kwargs)
所以上面的url,question_by_date
会被称为
question_by_date(request, year=2001, month=11, day=2)
但我也希望用户能够输入 url 仅指定年份,例如
...bydate/year=2005/
哪个会调用
question_by_date(request, year=2005)
或者就此而言,年、月、日的任意组合(例如只是年和月,或者只是年和日,等等)
那么,这可能吗?我在正则表达式方面经验不足,我知道你可以在正则表达式中有可选的字符串匹配(零个或多个),这在正常情况下会匹配上面的内容,但在这里我们也将(可选)参数传递给函数.
注意:
已经有人问过一个与此非常相似的问题 here。我意识到我可以为每个组合制作不同的 URL,但这需要制作 8 个不同的 URL。另外,这个问题是 6 年前提出的。希望在此期间进行了一些改进?
我想你需要的是GET
参数:
定义你url不带任何参数:
url(r'^bydate/$', views.question_by_date, name='question-by-date')
在您看来,提取GET
个参数:
from datetime import date
def question_by_date(request):
year = request.GET.get('year', 2005)
month = request.GET.get('month', 1)
day = request.GET.get('day', 1)
# use the parameters however you want afterwards
查看 django doc 了解有关 http GET
的更多详细信息。
我现在开始使用 Django(已经有相当多的 Python 知识,以及其他语言)。我想知道是否可以通过 url 将可选参数传递给视图(输入某个 url 时调用的函数)。我有:
url(regex=r'^bydate/year=(?P<year>[0-9]+)_month=(?P<month>[0-9]+)_day=(?P<day>[0-9]+)/$', view=views.question_by_date, name='question_by_date')
所以,换句话说,如果 url 的结尾看起来像这样,例如:
...bydate/year=2001_month=11_day=2/
然后调用question_by_date
函数,函数签名如下:
question_by_date(request, **kwargs)
所以上面的url,question_by_date
会被称为
question_by_date(request, year=2001, month=11, day=2)
但我也希望用户能够输入 url 仅指定年份,例如
...bydate/year=2005/
哪个会调用
question_by_date(request, year=2005)
或者就此而言,年、月、日的任意组合(例如只是年和月,或者只是年和日,等等)
那么,这可能吗?我在正则表达式方面经验不足,我知道你可以在正则表达式中有可选的字符串匹配(零个或多个),这在正常情况下会匹配上面的内容,但在这里我们也将(可选)参数传递给函数.
注意:
已经有人问过一个与此非常相似的问题 here。我意识到我可以为每个组合制作不同的 URL,但这需要制作 8 个不同的 URL。另外,这个问题是 6 年前提出的。希望在此期间进行了一些改进?
我想你需要的是GET
参数:
定义你url不带任何参数:
url(r'^bydate/$', views.question_by_date, name='question-by-date')
在您看来,提取
GET
个参数:
from datetime import date
def question_by_date(request):
year = request.GET.get('year', 2005)
month = request.GET.get('month', 1)
day = request.GET.get('day', 1)
# use the parameters however you want afterwards
查看 django doc 了解有关 http GET
的更多详细信息。