/ / comment avoir des options dans les urls dans django 2.0 - django, django-urls, django-2.0

Comment avoir des options dans les URL de Django 2.0 - Django, Django-urls, Django-2.0

Dans Django 1, j'avais l'habitude d'avoir des choix d'URL comme celui-ci:

url("meeting/(?P<action>edit|delete)/", views.meeting_view, name="meeting"),

Comment je fais cela dans Django 2.0 avec la syntaxe <>:

Peut-être quelque chose comme ça?

path("meeting/(<action:edit|delete>)/", views.meeting_view, name="meeting"),

Réponses:

2 pour la réponse № 1

Si je comprends la Documentation, votre première syntaxe devrait fonctionner immédiatement.

Quoi qu’il en soit, voici comment vous pourriez faire avec la nouvelle syntaxe:

Premier fichier = créer un paquet Python converters et ajouter edit_or_delete.py avec ça:

import re

class EditOrDeleteConverter:
regex = "(edit|delete)"

def to_python(self, value):
result = re.match(regex, value)
return result.group() if result is not None else ""

def to_url(self, value):
result = re.match(regex, value)
return result.group() if result is not None else ""

Et pour votre urls.py fichier, ceci:

from django.urls import register_converter, path

from . import converters, views

register_converter(converters.EditOrDeleteConverter, "edit_or_delete")

urlpatterns = [
path("meeting/<edit_or_delete:action>/", views.meeting_view, name="meeting"),
]

1 pour la réponse № 2

Je ne voudrais pas utiliser les verbes dans les URL pour indiquer le but. Fiez-vous plutôt à des verbes HTTP tels que GET, PUT, POST, DELETE et manipulez-les à votre vue. De cette façon, vous pouvez avoir une seule classe de vue gérant toutes ces méthodes avec une seule URL.