用于处理 csv 的自定义路径转换器的 Django v2+ 正则表达式
Django v2+ regex for custom path converter to handle csv
注意:在发布之前,我已经搜索了 csv 正则表达式。到目前为止,我为 csv 找到的最佳正则表达式可以在答案 here.
中找到
我想创建一个自定义路径转换器来处理 csv,例如类似于:
register_converter(CSVConverter, 'csv')
urlpatterns = [
...
path('csv/<csv:list_of_values>/', views.csv_view, name='csv_view'),
...
]
其中 list_of_values
的每个值都是一个字符串 而不是 需要用引号引起来,例如
http://localhost:8000/csv/value1,value2,value3/
我尝试了以下方法:
class CSVConverter:
# see
regex = "(?:,|\n|^)(\"(?:(?:\"\")*[^\"]*)*\"|[^\",\n]*|(?:\n|$))"
def to_python(self, value):
return value.split(',')
def to_url(self, value):
return ','.join(value)
但这行不通...
除非我遗漏了什么,否则您不需要复杂的正则表达式。您只需捕获任何不包含斜杠的字符串 (/
),拆分由 to_python()
处理。您可以简单地使用内置 StringConverter
:
中的正则表达式
class CSVConverter:
regex = '[^/]+'
def to_python(self, value):
return value.split(',')
def to_url(self, value):
return ','.join(value)
或者,您也可以继承 StringConverter
:
from django.urls.converters import StringConverter
class CSVConverter(StringConverter):
def to_python(self, value):
return value.split(',')
def to_url(self, value):
return ','.join(value)
注意:在发布之前,我已经搜索了 csv 正则表达式。到目前为止,我为 csv 找到的最佳正则表达式可以在答案 here.
中找到我想创建一个自定义路径转换器来处理 csv,例如类似于:
register_converter(CSVConverter, 'csv')
urlpatterns = [
...
path('csv/<csv:list_of_values>/', views.csv_view, name='csv_view'),
...
]
其中 list_of_values
的每个值都是一个字符串 而不是 需要用引号引起来,例如
http://localhost:8000/csv/value1,value2,value3/
我尝试了以下方法:
class CSVConverter:
# see
regex = "(?:,|\n|^)(\"(?:(?:\"\")*[^\"]*)*\"|[^\",\n]*|(?:\n|$))"
def to_python(self, value):
return value.split(',')
def to_url(self, value):
return ','.join(value)
但这行不通...
除非我遗漏了什么,否则您不需要复杂的正则表达式。您只需捕获任何不包含斜杠的字符串 (/
),拆分由 to_python()
处理。您可以简单地使用内置 StringConverter
:
class CSVConverter:
regex = '[^/]+'
def to_python(self, value):
return value.split(',')
def to_url(self, value):
return ','.join(value)
或者,您也可以继承 StringConverter
:
from django.urls.converters import StringConverter
class CSVConverter(StringConverter):
def to_python(self, value):
return value.split(',')
def to_url(self, value):
return ','.join(value)