Django:条件URL模式?

时间:2013-06-14 15:01:12

标签: django django-urls

我想使用不同的robots.txt文件,具体取决于我的服务器是生产还是开发。

为此,我想在urls.py

中以不同方式路由请求
urlpatterns = patterns('',
   // usual patterns here
)

if settings.IS_PRODUCTION: 
  urlpatterns.append((r'^robots\.txt$', direct_to_template, {'template': 'robots_production.txt', 'mimetype': 'text/plain'}))
else:
  urlpatterns.append((r'^robots\.txt$', direct_to_template, {'template': 'robots_dev.txt', 'mimetype': 'text/plain'}))

但是,这不起作用,因为我没有正确使用patterns对象:我得到AttributeError at /robots.txt - 'tuple' object has no attribute 'resolve'

如何在Django中正确执行此操作?

2 个答案:

答案 0 :(得分:9)

试试这个:

if settings.IS_PRODUCTION: 
  additional_settings = patterns('',
     (r'^robots\.txt$', direct_to_template, {'template': 'robots_production.txt', 'mimetype': 'text/plain'}),
  )
else:
  additional_settings = patterns('',
      (r'^robots\.txt$', direct_to_template, {'template': 'robots_dev.txt', 'mimetype': 'text/plain'}),
  )

urlpatterns += additional_settings

由于您希望附加tuple种类型,append不起作用 此外,pattern()会为您调用urlresolver。在你的情况下,你不是,因此错误。

答案 1 :(得分:0)

在 Django 1.8 及更高版本中,添加 URL 很简单:

if settings.IS_PRODUCTION:
    urlpatterns += [
      url(r'^robots\.txt$', direct_to_template, {'template': 'robots_production.txt', 'mimetype': 'text/plain'}),
    ]