Python 如何将django 1.4的正则表达式转换为django 2.0样式的路径?
Python 如何将django 1.4的正则表达式转换为django 2.0样式的路径?,python,django,django-urls,Python,Django,Django Urls,url('add/(?PC[DR])/$,add\u bank\u entry), 如何将此行转换为django 2.0版本path()pattern?C[DR]做什么 C只是一个必须匹配的文本字符。[DR]部分是一个字符的正则表达式语法,可以是aD或andR。因此,以下两个路径对于给定的URL模式有效: add/CD/ add/CR/ 调用add\u bank\u entry视图时,journal\u entry将设置为'CD'或'CR' 您可以注册两个路由,对于每个路由的journal\u
url('add/(?PC[DR])/$,add\u bank\u entry),
如何将此行转换为django 2.0版本
path()
pattern?C[DR]
做什么 C只是一个必须匹配的文本字符。[DR]
部分是一个字符的正则表达式语法,可以是aD
或andR
。因此,以下两个路径对于给定的URL模式有效:
add/CD/
add/CR/
调用add\u bank\u entry
视图时,journal\u entry
将设置为'CD'
或'CR'
您可以注册两个路由,对于每个路由的journal\u type
,使用正则表达式作为re\u 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路径之一,并将其中一个的正确字符串值传递给view函数
通过将url()
替换为:
然后在路径中使用它:
path('add/<journaltype:journal_type>/', add_bank_entry),
path('add/',add_bank_entry),
来自Django文档的
url(regex,view,kwargs=None,name=None)
此函数
是django.url.re\u path()
的别名。它很可能会在未来被弃用
未来版本
和之间的关键区别在于path
使用不带正则表达式的路由
您可以使用re_path
进行复杂的正则表达式调用,而只使用path
进行更简单的查找
因此,您可以使用
re\u路径(“添加/(?PC[DR])/$”,添加银行条目),
而不是
url('add/(?PC[DR])/$,add\u bank\u entry),
如果正则表达式使用url()
工作正常,我可以写到路径('/',views.something)
。。那么如何写这些C[DR]?@ChidanandaNayak:你不必,但我会在一秒钟内解释如何写。先生,那么如何在path中写呢?@ChidanandaNayak:见更新的答案。您可以从这里选择3个不同的选项,所有3个选项都将替换当前的url()
定义。挑一个。
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),