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 № 1Si 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.