Django v2 +正则表达式,用于自定义路径转换器以处理csv

时间:2018-10-01 09:09:54

标签: django django-urls

注意:发布之前,我已经搜索过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 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 :(得分:2)

除非我缺少任何内容,否则您不需要复杂的正则表达式。您只需要捕获不包含斜杠(from lxml import html from lxml import etree import requests page = requests.get('http://www.freejobalert.com/upsc-advt-no-17/31908/') tree = html.fromstring(page.content) tables = tree.xpath('//table') file = open("output.html","wb") for t in tables: print(etree.tostring(t)) file.write(etree.tostring(t)) )的任何字符串,拆分就由/处理。您可以简单地使用内置StringConverter中的正则表达式:

to_python()

或者,您也可以继承class CSVConverter: regex = '[^/]+' def to_python(self, value): return value.split(',') def to_url(self, value): return ','.join(value) 的子类:

StringConverter