2017-12-30 3 views
2

In Django 1 habe ich url Entscheidungen wie diese haben:, wie Optionen in Urls in django haben 2,0

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

Wie kann ich dies tun in Django 2.0 mit dem <> Syntax:

Vielleicht etwas so was?

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

Sie können 're_path' verwenden https://docs.djangoproject.com/de/2.0/ref/urls/#re-path – neverwalkaloner

+0

@newalkaloner Wenn Sie Ihren eigenen' re_path' schreiben müssen, anstatt verwenden zu können Die Syntax ist sofort out-of-box, wie es bei der Version 1.x der Fall war. Dies ist keine Verbesserung von Django 2, sondern eine Regression. Ich hoffe, es gibt einen besseren Weg! –

Antwort

0

Wenn ich die documentation, Ihre erste Syntax sollte verstehen, arbeiten richtig out-of-the-box.

Auf jeden Fall hier, wie Sie mit der neuen Syntax tun könnten:

Ersten file = machen ein Python-Paket converters und fügen edit_or_delete.py mit, dass:

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 '' 

Und für Ihre urls.py Datei, dies:

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

Ich würde keine Verben in URLs verwenden, um den Zweck anzugeben. Verlasse dich stattdessen auf HTTP-Verben wie GET, PUT, POST, DELETE und handle sie in deiner Sicht. Auf diese Weise können Sie nur eine Ansichtsklasse verwenden, die alle diese unterschiedlichen Methoden mit nur einer URL behandelt.