我有两个URL调度。一个在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
。是否有可能以下列方式进行多次调度?
答案 0 :(得分:3)
好问题。 (感谢您在这里发布完整的代码。现在,我想看看您的目标是什么。)最简单的解决方案是扭转这样的模式:
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'),
)
调度程序在发现匹配时调度。因此,如果网址与上面r'^sitemap\.xml$
中的urlpatterns
匹配,则调度程序将不会继续使用第二种模式
答案 1 :(得分:0)
除了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'
>>>
VS
>>> re.search('(?P<search_word>^(?!sitemap.xml)[\.a-zA-Z]*)/?$', 'sitemap.xml').group(0)
>>>