如何在django 2.0中的URL中有选项

问题描述 投票:2回答:2

在Django 1中,我曾经有过像这样的网址选择:

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

我如何使用<>语法在Django 2.0中执行此操作:

也许是这样的?

path('meeting/(<action:edit|delete>)/', views.meeting_view, name='meeting'),
django django-urls django-2.0
2个回答
2
投票

如果我理解documentation,你的第一个语法应该是开箱即用的。

无论如何,这是你如何使用新语法:

第一个文件=制作一个Python包converters并添加edit_or_delete.py

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

对于你的urls.py文件,这个:

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
投票

我不会在网址中使用动词来表明目的。相反,依靠HTTP动词,如GETPUTPOSTDELETE,并在你的视图中处理它们。这样,您只需要一个视图类,只需一个URL即可处理所有这些不同的方法。

© www.soinside.com 2019 - 2024. All rights reserved.