使用Regex发送多个url

2024-05-19 12:25:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个网址发送。一个在http://domain.com/thisword上捕获单词,而第二个调度是http://domain.com/sitemap.xml上的站点地图。工作不正常的当前代码是:

urlpatterns = patterns('',
    url(ur'(?P<search_word>[ÆØÅæøåa-zA-Z]*)/?$', 'website.views.index_view', name='website_index'),
    url(r'^sitemap\.xml$', 'django.contrib.sitemaps.views.sitemap', {'sitemaps': sitemaps}),
)

因此,基本上第一次调度捕获所有内容,包括sitemap.xml。是否可以按以下方式进行多次调度?你知道吗


Tags: comhttpurlindex站点domainwebsitexml
2条回答

问得好。(感谢您在此处发布完整代码。现在我明白你在追求什么了,我想。)最简单的解决办法就是扭转这种模式:

urlpatterns = patterns('',
    url(r'^sitemap\.xml$', 'django.contrib.sitemaps.views.sitemap', {'sitemaps': sitemaps}),
    url(ur'(?P<search_word>[ÆØÅæøåa-zA-Z]*)/?$', 'website.views.index_view', name='website_index'),
)

调度员在找到匹配项时立即进行调度。因此,如果一个url与上面urlpatterns中的r'^sitemap\.xml$匹配,那么调度器将不会继续使用第二种模式

除了Justin的答案之外,我还想补充一点,在一般情况下,可以使用负先行模式来防止某些字符串匹配。http://docs.python.org/2/library/re.html#regular-expression-syntax

>>> re.search('(?P<search_word>^[\.a-zA-Z]*)/?$', 'sitemap.xml').group(0)
'sitemap.xml'
>>>

>>> re.search('(?P<search_word>^(?!sitemap.xml)[\.a-zA-Z]*)/?$', 'sitemap.xml').group(0)
>>>

相关问题 更多 >