Django中类似express.js的URL
我们可以在django中使用类似于express.js的url配置吗?有时候使用regex是一件非常痛苦的事情 express.js网址:Django中类似express.js的URL,django,url,configuration,express,Django,Url,Configuration,Express,我们可以在django中使用类似于express.js的url配置吗?有时候使用regex是一件非常痛苦的事情 express.js网址: app.get('/users/:id/feed',function(){}) django URL: url(r'^users/(?P<id>.*)/feed$', 'users.views.feed') 在核心Django中,只能使用正则表达式指定URL 我不熟悉express.js,但是通过使用regex,您可以做一些很酷的事情,例如:
app.get('/users/:id/feed',function(){})
django URL:
url(r'^users/(?P<id>.*)/feed$', 'users.views.feed')
在核心Django中,只能使用正则表达式指定URL 我不熟悉express.js,但是通过使用regex,您可以做一些很酷的事情,例如:
- 位置参数和命名参数
# named url(r'^(?P<foo>.*)/(?P<foo2>.*)/$', 'view', name='view') # corresponds to # something does not have to be supplied def view(request, something=None, foo=None, foo2=None) ...
- 计算反向URL
# with url(r'^some/path/(?P<foo>.*)/(?P<foo2>.*)/$', 'view', name='view') >>> reverse('view', kwargs={'foo':'hello', 'foo2':'world'}) u'some/path/hello/world/'
#带有 url(r'^some/path/(?P.*)/(?P.*)/$,'view',name='view') >>>反向('view',kwargs={'foo':'hello','foo2':'world}) u'some/path/hello/world/'
- 限制URL
url(r'^some/path/(?P<id>\d+)/$', 'view', name='view') # will only allow urls like # some/path/5/ # some/path/10/ # and will reject # some/path/hello/ # some/path/world/
url(r'^some/path/(?P\d+/$),'view',name='view') #只允许像这样的URL #部分/路径/5/ #部分/路径/10/ #并将拒绝 #some/path/hello/ #一些/路径/世界/
- 位置参数和命名参数
# named url(r'^(?P<foo>.*)/(?P<foo2>.*)/$', 'view', name='view') # corresponds to # something does not have to be supplied def view(request, something=None, foo=None, foo2=None) ...
- 计算反向URL
# with url(r'^some/path/(?P<foo>.*)/(?P<foo2>.*)/$', 'view', name='view') >>> reverse('view', kwargs={'foo':'hello', 'foo2':'world'}) u'some/path/hello/world/'
#带有 url(r'^some/path/(?P.*)/(?P.*)/$,'view',name='view') >>>反向('view',kwargs={'foo':'hello','foo2':'world}) u'some/path/hello/world/'
- 限制URL
url(r'^some/path/(?P<id>\d+)/$', 'view', name='view') # will only allow urls like # some/path/5/ # some/path/10/ # and will reject # some/path/hello/ # some/path/world/
url(r'^some/path/(?P\d+/$),'view',name='view') #只允许像这样的URL #部分/路径/5/ #部分/路径/10/ #并将拒绝 #some/path/hello/ #一些/路径/世界/
- 为了在Django中使用更简单的url结构,您需要编写一个实用函数,将url格式转换为正则表达式格式
下面是一个基于您的示例的简单函数:
def easy_url(url_str):
patt = re.compile(r':\w+/?')
matches = patt.findall(url_str)
for match in matches:
var = match[1:-1]
# generate re equivalent
var_re = r'(?P<%s>\w+)/'%var
url_str = url_str.replace(match, var_re)
url_str += '$'
return url_str
# in your url file
url(easy_url('/users/:id/feed/'), 'users.views.feed')
def easy\u url(url\u str):
patt=re.compile(r':\w+/?')
matches=patt.findall(url\u str)
对于匹配中的匹配:
var=匹配[1:-1]
#生成重当量
var_re=r'(?P\w+)/'%var
url\u str=url\u str.replace(匹配,变量)
url_str+='$'
返回url\u str
#在您的url文件中
url(简单url('/users/:id/feed/'),'users.views.feed')
您可以更新此函数以指定url变量的类型,例如仅限数字等
然而,正则表达式非常强大,你可以用它们做很多事情。因此,您应该仅对具有简单规则的URL使用此类包装器,以保持其轻量级 为了在Django中使用更简单的url结构,您需要编写一个实用函数,将url格式转换为正则表达式格式 下面是一个基于您的示例的简单函数:
def easy_url(url_str):
patt = re.compile(r':\w+/?')
matches = patt.findall(url_str)
for match in matches:
var = match[1:-1]
# generate re equivalent
var_re = r'(?P<%s>\w+)/'%var
url_str = url_str.replace(match, var_re)
url_str += '$'
return url_str
# in your url file
url(easy_url('/users/:id/feed/'), 'users.views.feed')
def easy\u url(url\u str):
patt=re.compile(r':\w+/?')
matches=patt.findall(url\u str)
对于匹配中的匹配:
var=匹配[1:-1]
#生成重当量
var_re=r'(?P\w+)/'%var
url\u str=url\u str.replace(匹配,变量)
url_str+='$'
返回url\u str
#在您的url文件中
url(简单url('/users/:id/feed/'),'users.views.feed')
您可以更新此函数以指定url变量的类型,例如仅限数字等
然而,正则表达式非常强大,你可以用它们做很多事情。因此,您应该仅对具有简单规则的URL使用此类包装器,以保持其轻量级 是的,你是对的,使用正则表达式太高级了,但是我想要更简单的解决方案,感谢Patternsys,你是对的,使用正则表达式太高级了,但是我想要更简单的解决方案,感谢patternsNo问题。我认为你可以简化很多常见的url,使用一个简单的url结构,就像你提到的那样。此外,如果您有多个参数,例如/users/:id/feed/:cat/没有问题,则这应该可以工作。我认为你可以简化很多常见的url,使用一个简单的url结构,就像你提到的那样。此外,如果您有多个参数,例如/users/:id/feed/:cat,则这应该可以工作/