Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何将django 1.4的正则表达式转换为django 2.0样式的路径?_Python_Django_Django Urls - Fatal编程技术网

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]
部分是一个字符的正则表达式语法,可以是a
D
或and
R
。因此,以下两个路径对于给定的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),