在Django< 2中,正常的做法是使用正则表达式。但现在建议在Django => 2使用path()而不是url()
path('account/<int:code>/', views.account_code, name='account-code')
这看起来没问题并且匹配网址格式
/account/23/
/account/3000/
然而,这个问题是我还希望它匹配负整数,如
/account/-23/
请问我该怎么做路径()?
答案 0 :(得分:15)
您可以编写custom路径转换器:
class NegativeIntConverter:
regex = '-?\d+'
def to_python(self, value):
return int(value)
def to_url(self, value):
return '%d' % value
在urls.py中:
from django.urls import register_converter, path
from . import converters, views
register_converter(converters.NegativeIntConverter, 'negint')
urlpatterns = [
path('account/<negint:code>/', views.account_code),
...
]
答案 1 :(得分:1)
我懒得做一个花哨的路径转换器,所以我只是把它捕获为一个字符串并在视图中将其转换为整数(进行一些基本的完整性检查以确保该值可以正确转换为整数):
urlpatterns = [
path('account/<str:code>/', views.account_code),
...
]
try:
code = int(self.kwargs['code'])
except ValueError:
raise ValueError("'code' must be convertible to an integer.")