4

在 Django 1 中,我曾经有这样的 url 选择:

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

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

也许是这样的?

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

2 回答 2

4

如果我理解文档,您的第一个语法应该可以直接使用。

无论如何,这是您可以如何使用新语法的方法:

第一个文件 = 制作一个 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'),
]
于 2017-12-30T10:45:24.390 回答
1

我不会在 url 中使用动词来表示目的。相反,请依赖 HTTP 动词,例如GET, PUT, POSTDELETE并在您的视图中处理它们。这样一来,您就可以让一个视图类通过一个 URL 来处理所有这些不同的方法。

于 2017-12-30T14:28:30.710 回答