如何将 Django 1.4 的正则表达式转换为 Django 2.0 样式路径?

how to convert regular expression of django 1.4 to django 2.0 style path?

url('add/(?P<journal_type>C[DR])/$', add_bank_entry),

如何将此行转换为 django 2.0 版本 path() 模式? C[DR] 是做什么的?

C只是一个必须匹配的文字字符。 [DR] 部分是 一个字符的正则表达式语法,可以是 DR。因此,以下两条路径对于给定的 URL 模式有效:

add/CD/
add/CR/
当调用 add_bank_entry 视图时,

journal_entry 将设置为 'CD''CR'

您可以为每个 两个 路由和 pass in default values 注册 journal_type,使用与 re_path() 一样的正则表达式,或者注册一个知道如何处理两个字符串匹配的自定义路径转换器。

使用两个 url 就足够简单了:

path('add/CD/', add_bank_entry, {'journal_type': 'CD'}, name='add_bank_entry'),
path('add/CR/', add_bank_entry, {'journal_type': 'CR'}, name='add_bank_entry'),

这完全一样;匹配两个可能的 URL 路径之一,并将正确的字符串值传递给视图函数。

您可以只采用原始正则表达式,而无需将 url() 替换为 re_path():

re_path(r'add/(?P<journal_type>C[DR])/$', add_bank_entry),

在 Django 2.0 中,url()re_path() 的别名,因此您暂时无需更改任何内容即可。在未来的 Django 版本中,别名将被删除。

如果该模式在您的 URL 中很常见(甚至在不同的 Django 应用程序中),您可以创建自定义路径转换器:

from django.urls import register_converter, StringConverter

class JournalEntryTypePathConverter(StringConverter)
    regex = 'C[DR]'

register_converter(JournalEntryTypePathConverter, 'journaltype')

然后在路径中使用它:

path('add/<journaltype:journal_type>/', add_bank_entry),

来自 url

的 Django 文档

url(regex, view, kwargs=None, name=None) This function is an alias to django.urls.re_path(). It’s likely to be deprecated in a future release.

path and re_path 之间的主要区别在于 path 使用没有正则表达式的路由

您可以使用 re_path 进行复杂的正则表达式调用,而仅使用 path 进行更简单的查找


所以,你可以使用
re_path('add/(?P<journal_type>C[DR])/$', add_bank_entry), 而不是

url('add/(?P<journal_type>C[DR])/$', add_bank_entry), 如果正则表达式与 url()

一起工作正常