如何在 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_path
docs.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 动词,例如 GET
、PUT
、POST
、DELETE
,并在您的视图中处理它们。这样一来,您就可以让一个视图类通过一个 URL 处理所有这些不同的方法。
【讨论】:
以上是关于如何在 django 2.0 中的 url 中有选项的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Django 2.0 中使用波斯语蛞蝓解码 URL?
get_queryset中的Django 2.0 url参数