簡體   English   中英

Django-URL中的regex可選功能參數

[英]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參數:

  1. 定義沒有任何參數的網址:

    url(r'^bydate/$', views.question_by_date, name='question-by-date')

  2. 在您的視圖中,提取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
  1. 像這樣呼叫您的網址:

    HTTP://本地主機:8000 / bydate /年= 2016&月= 1天= 1

檢查Django文檔GET有關http GET更多詳細信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM