W Django 1 miałem takie opcje adresów URL:
url("meeting/(?P<action>edit|delete)/", views.meeting_view, name="meeting"),
Jak to zrobić w Django 2.0 ze składnią <>:
Może coś takiego?
path("meeting/(<action:edit|delete>)/", views.meeting_view, name="meeting"),
Odpowiedzi:
2 dla odpowiedzi № 1Jeśli rozumiem dokumentacja, Twoja pierwsza składnia powinna działać od razu po wyjęciu z pudełka.
W każdym razie oto, jak możesz zrobić z nową składnią:
Pierwszy plik = stwórz pakiet Python converters
i dodaj edit_or_delete.py
z tym:
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 ""
I dla twojego urls.py
plik, to:
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 dla odpowiedzi nr 2
Nie używałbym czasowników w adresach URL, aby wskazać cel. Raczej polegaj na czasownikach HTTP, takich jak GET
, PUT
, POST
, DELETE
i postępuj według nich. W ten sposób możesz mieć tylko jedną klasę widoków obsługującą wszystkie te różne metody za pomocą tylko jednego adresu URL.