我在Django中有一个长网址模式,类似于:
url(r'^(?i)top-dir/(?P<first_slug>[-\w]+?)/(?P<second_slug>[-\w]+?)/(?P<third_slug>[-\w]+?).html/$',
'apps.Discussion.views.pricing',
当然,它不遵循PEP8指南,因为字符在一行中超过80。我找到了解决这个问题的两种方法:
第一个(使用反斜杠):
url(r'^(?i)top-dir/(?P<first_slug>[-\w]+?)/(?P<second_slug>[-\w]+?)'\
'/(?P<third_slug>[-\w]+?).html/$',
'apps.Discussion.views.pricing',
第二个 - 使用():
url((r'^(?i)top-dir/(?P<first_slug>[-\w]+?)/(?P<second_slug>[-\w]+?)',
r'/(?P<third_slug>[-\w]+?).html/$'),
'apps.Discussion.views.pricing'),
他们两个都被正则表达式打破。有没有更好的方法来解决这个问题。或者为网址编写如此长的正则表达式是不好的做法。
答案 0 :(得分:22)
相邻的字符串是连接的,所以你可以这样做:
url(r'^(?i)top-dir/(?P<first_slug>[-\w]+?)/'
r'(?P<second_slug>[-\w]+?)/'
r'(?P<third_slug>[-\w]+?).html/$',
'apps.Discussion.views.pricing',)
答案 1 :(得分:-2)
PEP8没有正则表达式格式提示。但试试这些:
(?i) → re.IGNORECASE
)
slugs = re.compile(r'''
^
top-dir/
(?P<first_slug>[-\w]+?)/
(?P<second_slug>[-\w]+?)/
(?P<third_slug>[-\w]+?).html/
$
''', re.VERBOSE|re.IGNORECASE)
url(slugs, 'apps.Discussion.views.pricing', ...)