簡體   English   中英

各種精確字符串匹配之間的Django URL正則表達式

[英]Django URL regex between various exact string matches

Django (v2.2)

我正在嘗試實現一個由三個完全匹配allgswebservice組成的路由,以在頁面上的表格中進行過濾。

path(r'^(?P<mode>all|gs|webservice)$', get_orders, name='dash.orders_mode'),
path('(?P<mode>/^all$|^gs$|^webservice)/$', get_orders, name='dash.orders_mode'),

兩種方式似乎都不起作用

這是因為路線上也有 id。

編輯:

這是問題的解決方案( NoReverseMatch at /dash/orders/all沒有NoReverseMatch at /dash/orders/all ):

re_path('(?P<mode>(all|gds|ws))', get_orders, name='dash.orders_mode'),

我會避免將業務邏輯放入您的網址中。

path('<mode>', get_orders, name='dash.orders_mode'),

那么在你看來

from django.http import Http404
def get_orders(request, mode):
    if mode not in ['all', 'gs', 'webservice']:
        raise Http404

為了使用正則表達式,你應該使用re_path(..) [Django-doc]path(..) [Django-doc]是一個使用路徑轉換器的函數:

    re_path(r'^(?P<mode>all|gs|webservice)$', get_orders, name='dash.orders_mode'),

話雖如此,最好在這里簡單地創建三個路徑,也許使用kwargs=…參數將額外的數據傳遞給視圖。 這樣你就可以使正在發生的事情更具可讀性。

暫無
暫無

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

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