47 votes

Rendre facultatif un jeton d'URL Django Regex

Vous avez une URL qui accepte un first_name y last_name dans Django :

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

Comment inclure le jeton d'URL OPTIONNEL de title sans créer de nouvelles lignes. Ce que je veux dire, c'est que 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 ?

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

83voto

Ignacio Vazquez-Abrams Points 312628
('^(?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.

1 votes

Merci pour cela. Comment puis-je faire une URL de JUST facultative ' titles c'est-à-dire (?:/(?P<title1>[a-zA-Z]+))?(?:/(?P<title2>[a-zA-Z]+))? Merci pour toute aide

7 votes

Notez que le ? : est important dans le groupe extérieur. Sans lui, l'URL fonctionnera correctement lors de la navigation, mais reverse() ne remarquera pas l'argument à l'intérieur.

0 votes

Plus d'informations à ce sujet dans le documents officiels .

1voto

Rexcirus Points 156

Dans le cas où vous cherchez plusieurs arguments optionnels, sans aucun argument obligatoire, il suffit d'omettre "/" au début, comme par exemple :

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 consulter sur le site :

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X