用于处理 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)