Django URL регулярное выражение между различными точными совпадениями строк - PullRequest
1 голос
/ 20 марта 2020

Django (v2.2)

Я пытаюсь найти маршрут, который состоит из трех точных совпадений all, gs и webservice, чтобы сделать фильтр в таблице на страницы.

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'),

оба пути не работают

Это потому, что на маршруте также есть идентификаторы.

РЕДАКТИРОВАТЬ:

Это было решением проблемы (без NoReverseMatch at /dash/orders/all):

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

Ответы [ 2 ]

1 голос
/ 20 марта 2020

Я бы не стал добавлять бизнес-логи c в ваши URL.

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
0 голосов
/ 20 марта 2020

Чтобы использовать регулярные выражения , вы должны использовать re_path(..) [Django -doc] , path(..) [Django -doc] - это функция, которая использует преобразователи путей :

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

При этом, возможно, было бы лучше сделать три пути просто и, возможно, используйте параметр kwargs=&hellip; для передачи дополнительных данных в представление. Таким образом, вы делаете более читабельным происходящее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...