Django v2 + регулярное выражение для пользовательского конвертера пути для обработки CSV - PullRequest
0 голосов
/ 01 октября 2018

Примечание: до публикации я уже искал csv regex.Лучшее регулярное выражение, которое я нашел для csv, можно найти в ответе здесь .


Я хотел бы создать собственный преобразователь пути для обработки 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 https://stackoverflow.com/a/48806378/5623899
    regex = "(?:,|\n|^)(\"(?:(?:\"\")*[^\"]*)*\"|[^\",\n]*|(?:\n|$))"

    def to_python(self, value):
        return value.split(',')

    def to_url(self, value):
        return ','.join(value)

но это не работает ...

1 Ответ

0 голосов
/ 01 октября 2018

Если я что-то упустил, вам не нужно сложное регулярное выражение.Вам просто нужно захватить любую строку, не содержащую косую черту (/), расщепление обрабатывается 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)
...