[英]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)
因此,使用上述網址, question_by_date
將被稱為
question_by_date(request, year=2001, month=11, day=2)
但我也希望用戶能夠輸入僅指定年份的網址,例如
...bydate/year=2005/
它將調用
question_by_date(request, year=2005)
或就此而言,可以是年,月,日的任意組合(例如僅年和月,甚至僅年和日,等等)
那么,這可能嗎? 我對regex不那么有經驗,我知道您可以在regex中有可選的字符串匹配(零個或多個),在正常情況下可以匹配上面的字符串,但是在這里我們也將(可選)參數傳遞給函數。
注意:
這里已經提出了一個非常類似的問題。 我意識到我可以為每個組合創建一個不同的URL,但這將需要創建8個不同的URL。 另外,這個問題是6年前提出的。 希望與此同時有所改善?
我認為您需要的是GET
參數:
定義沒有任何參數的網址:
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文檔以GET
有關http GET
更多詳細信息。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.