web-dev-qa-db-fra.com

Création d'une expression régulière Django Token URL facultatif

Vous disposez d'une URL qui accepte un first_name et last_name à Django:

('^(?P<first_name>[a-zA-Z]+)/(?P<last_name>[a-zA-Z]+)/$','some_method'),

Comment incluriez-vous le jeton d'URL FACULTATIF de title, sans créer de nouvelles lignes. Ce que je veux dire par là, dans un scénario idéal:

#A regex constant
OP_REGEX = r'THIS IS OPTIONAL<title>[a-z]'
#Ideal URL
('^(?P<first_name>[a-zA-Z]+)/(?P<last_name>[a-zA-Z]+)/OP_REGEX/$','some_method'),

Est-ce possible sans créer une nouvelle ligne, c'est-à-dire.

('^(?P<first_name>[a-zA-Z]+)/(?P<last_name>[a-zA-Z]+)/(?P<title>[a-zA-Z]+)/$','some_method'),
46
Federer
('^(?P<first_name>[a-zA-Z]+)/(?P<last_name>[a-zA-Z]+)(?:/(?P<title>[a-zA-Z]+))?/$','some_method'),

N'oubliez pas de donner à title une valeur par défaut dans la vue.

77

Dans le cas où vous recherchez plusieurs arguments facultatifs, sans ceux requis, omettez simplement "/" au début, tels que:

re_path(r'^view(?:/(?P<dummy1>[a-zA-Z]+))?(?:/(?P<dummy2>[a-zA-Z]+))?(?:/(?P<dummy3>[a-zA-Z]+))?/$', views.MyView.as_view(), name='myname'),

que vous pouvez parcourir à:

http://localhost:8000/view/?dummy1=value1&dummy2=value2&dummy3=value3
0
Rexcirus