2013-06-14 2 views
2

Я хотел бы использовать другой файл robots.txt в зависимости от того, является ли мой сервер производством или разработкой.Django: условные шаблоны URL-адресов?

Чтобы сделать это, я хотел бы направить запрос по-разному в 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?

ответ

7

Попробуйте это:

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 для вас. В вашем случае вы не были, следовательно, ошибка.

+0

Это работает, спасибо! – Richard

+0

'urlpatterns' не является кортежем. Метод 'patterns' возвращает список, который может сделать append. –

+0

@PauloBu Вы правы, но я имел в виду, что вы должны конкатенировать типы 'tuple' – karthikr

Смежные вопросы