[英]A django url that contains several optional arguments / parameters
在嘗試構建我的第一個 django 項目時,我被困在傳遞值以進行產品過濾。 每個傳遞給它的值為 1 的特征將是一個活動過濾器,而其他的將是 0,即不活動。 網址.py:
urlpatterns=[
path('women/<str:category>/filter?pricefrom=<int:min>&to=<int:max>&size?s=<int:s>&m=<int:m>&l=<int:l>&xl=<int:xl>&xxl=<int:xxl>&xxxl=<int:xxxl>&color?blue=<int:blue>&red=<int:red>&yellow=<int:yellow>&black=<int:black>&white=<int:white>&green=<int:green>&brown=<int:brown>',views.women_category,name='women category page with filters'),
]
視圖.py:
def women_category(request,category,id=None,flag=None,min=None,max=None,s=None,m=None,l=None,xl=None,xxl=None,xxxl=None,blue=None,red=None,yellow=None,black=None,white=None,green=None,brown=None):
#product filter logics here
我希望用戶應該能夠使用任何可能的過濾器組合,過濾器是:價格:最小,最大尺寸:S,M,L,XL,XXL,XXXL 顏色:黃色,藍色,綠色,... ETC
我不知道如何在 url 中使用正則表達式,所以請幫我將 url 轉換為正則表達式 url 以便所有過濾器變量都可以選擇通過前端傳遞。
有幾種方法可以添加可選參數您可以使用正則表達式或添加多個模式。 您可以在此處查看示例: django 中的可選獲取參數?
但是在您使用 get 參數進行過濾的情況下,更好的選擇是在視圖上處理它。 因為你有很多參數,所以它需要很多重復的模式,它們差別很小,如果你用正則表達式 go ,這將是一個很長的正則表達式,或者如果你用一個簡單的正則表達式 go ,你必須對你的視圖進行驗證。 因此,只需獲取視圖中的值並在那里進行過濾:
def women_category(request,category):
min_value = request.GET.get("min")
max_value = request.GET.get("max")
flag = request.GET.get("flag")
...
您可以隨時添加或刪除任何參數,而不會在 URL 路徑文件中造成混亂。
您不需要也不應該將查詢參數作為 URL 的一部分進行匹配。 這些可通過 request.GET 在 Django 中獲得。
旁注:如果可能的話,我認為建議使用 <slug:category> 來匹配 URL 的那部分。 我不太確定會停在/。
網址.py:
urlpatterns = [
path('women/<slug:category>/filter',views.women_category,name='women category page with filters'),
]
視圖.py:
def women_category(request,category):
id = request.GET.get('id') # ... etc
# product filter logics here
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.