Django эффективно работает с robots.txt

Вот мой текущий метод обслуживания robots.txt

url(r'^robots\.txt/$', TemplateView.as_view(template_name='robots.txt',
                                            content_type='text/plain')),

Я не думаю, что это лучший способ. Я думаю, было бы лучше, если бы это было чисто статический ресурс и статически. Но способ моего приложения django структурирован в том, что статический корень и все последующие статические файлы находятся в

http://my.domain.com/static/stuff-here

Любые мысли? Я любитель в django, но

 TemplateView.as_view(template_name='robots.txt',
                                  content_type='text/plain')

выглядит намного более ресурсоемким, чем просто статический вызов моего статического каталога, который подается на nginx.

Ответ 1

Да, robots.txt не должен обслуживаться Django, если файл статический. Попробуйте что-то подобное в своем конфигурационном файле Nginx:

location  /robots.txt {
    alias  /path/to/static/robots.txt;
}

Смотрите здесь для получения дополнительной информации: http://wiki.nginx.org/HttpCoreModule#alias

То же самое относится и к файлу favicon.ico, если он у вас есть.

Эквивалентный код для конфигурации Apache:

Alias /robots.txt /path/to/static/robots.txt

Ответ 2

Я знаю, что это поздний ответ, я искал подобное решение, когда не имею доступа к конфигурации веб-сервера. Поэтому для тех, кто ищет подобное решение, я нашел эту страницу: http://www.techstricks.com/adding-robots-txt-to-your-django-project/

который предлагает добавить это в ваш проект url.py:

from django.conf.urls import url
from django.http import HttpResponse

urlpatterns = [
    #.... your project urls
    url(r'^robots.txt', lambda x: HttpResponse("User-Agent: *\nDisallow:", content_type="text/plain"), name="robots_file"),
]

который, я думаю, должен быть несколько более эффективным, чем использование файла шаблона, хотя это может сделать ваши URL-адреса неопрятными, если потребуется несколько опций Disallow :.