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

Posted

技术标签:

【中文标题】如何在 django 2.0 中的 url 中有选项【英文标题】:how to have options in urls in django 2.0 【发布时间】:2018-06-10 09:25:27 【问题描述】:

在 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'),

【问题讨论】:

你可以使用re_pathdocs.djangoproject.com/en/2.0/ref/urls/#re-path @neverwalkaloner 如果您必须编写自己的 re_path 而不是像 1.x 版本那样直接使用语法,这不是改进在 Django 2 中,但是一个回归。希望有更好的办法! 【参考方案1】:

如果我理解 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'),
]

【讨论】:

【参考方案2】:

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

【讨论】:

以上是关于如何在 django 2.0 中的 url 中有选项的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Django 2.0 中使用波斯语蛞蝓解码 URL?

get_queryset中的Django 2.0 url参数

带有 Django 2.0 的 Django REST 框架 URL

Django 2.0 url() 到 path()

Django 2.0 新款URL配置详解

如何配置Django url指向页面中的特定部分?