/ / jak mieć opcje w adresach URL w Django 2.0 - django, django-urls, django-2.0

jak mieć opcje w adresach URL w django 2.0 - django, django-urls, django-2.0

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

Jeś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.