Форум сайта python.su
проблема: Django не отдает robots.txt
причем “похожая” html-ка идентификатора сайта для яндекса отдается.
urls.py:
===========
# -*- coding: utf-8 -*-
from django.conf import settings
from django.conf.urls.defaults import *
from django import template
……
from mysite.views import yandex_webmaster, robots1
…..
urlpatterns = patterns('',
(r'^$', my_frontpage),
(r'^yandex_……..html$', yandex_webmaster),
(r'^robots.txt$', robots1), # (1-3)
………..
===========================
views.py:
=================
………
def yandex_webmaster(request):
return render_to_response('yandex_………html')
def robots1(request):
return render_to_response('robots.txt', mimetype=“text/plain”)
…..
======================
robots.txt и yandex_… html лежат в templates и куча других html из templates удачно подхватываются
на хостинге стоит CentOS 5 и последний Django ( 1.3 или 1.4 )
Офлайн
MantisABCкакую ошибку Джанга пишет? ибо на вид все выглядит нормально.
Может и не принципиально, но использовать лучше HttpResponse(тут_содержимое_robots.txt, mimetype='text/plain')
Офлайн
при включенном Debug = True выдает вот что:
====================================================
Page not found (404)Request Method: GET
Request URL: http://404.shtml
Using the URLconf defined in mysite.urls, Django tried these URL patterns, in this order:
^$
^yandex_……..html$
^robots.txt$
…………………………….
^media/(?P<path>.*)$
^$
^jquery/index/$
^mootools/index/$
^prototype/index/$
^admin/
^media/(.*)$
The current URL, 404.shtml, didn't match any of these.
You're seeing this error because you have DEBUG = True in your Django settings file. Change that to False, and Django will display a standard 404 page.
==========================================
а HttpResponse попробую, спасибо
Офлайн
возможно потому что джанга хочет вставить инфу в шаблон
Офлайн
я не понял насчет желания джанги вставить инфу в шаблон. Если можно, пожалуйста, подробнее.
но тут явно или какое-то свойство или глюк.
я вот тут перепробовал кучу вариантов, и пришел к такому:
hobots.txt - проходит на “ура!” , а вот точно такой же robots.txt - ни в какую.
так что тут где-то собака или разработчкики Джанги порылись.
( c HttpResponse кстати, та же история - robots.txt - не идёть )
urls.py:
===========================
urlpatterns = patterns('',
(r'^$', my_frontpage),
(r'^yandex_………html$', yandex_webmaster),
(r'^robots.txt$', robots1),
(r'^hobots.txt$', hobots1),
……………
============================
views.py:
===============
………
def robots1(request):
return render_to_response('robots_', mimetype=“text/plain”)
def hobots1(request):
return render_to_response('hobots_', mimetype=“text/plain”)
………….
===============
имя “родного” файла уже не robots.txt, но “отдается” то robots.txt и hobots.txt
все один в один, даже содержимое файла, но “hobots.txt” проходит, а “robots.txt” - нет.
Отредактировано MantisABC (Апрель 8, 2012 22:25:27)
Офлайн
MantisABC
(r'^robots.txt$', robots1),
(r'^robots\.txt$', robots1),
Офлайн
MantisABC
оборачивайте код в теги (code)…(/code) в квадратных скобках
1) Не понимаю, если в settings DEBUG=True, то почему упоминается 404.shtml ?
Проверить выдачу нужно так: http://site/robots.txt
2)Может быть фантастика,но как вариант: Уж не прописано в веб-сервере где нибудь выдачу robots.txt, т.е. Приходит запрос , его обрабатывает веб-сервер, не находя у себя в директориях файл генерирует ответ 404 в виде 404.shtml который переходит Джанге, которая не находит в url.py соответствующий обработчик?
3) Попробуйте в коде функции представления явно прописать текст из robots.txt
Отредактировано JOHN_16 (Апрель 9, 2012 01:30:12)
Офлайн
Chern
MantisABC
(r'^robots.txt$', robots1),
Меня смущает регулярка ulr'a. Должно быть так:
(r'^robots\.txt$', robots1),
Отредактировано MantisABC (Апрель 10, 2012 10:49:09)
Офлайн
А почему не использовать просто direct_to_template?
url(r'^yandex_….txt$', direct_to_template,
{'template': ‘yandex_…….txt’}),
Проверка от яндекса проходит.
По каким-то соображениям, так делать нельзя???
Офлайн
А почему не использовать просто direct_to_template?Во первых он не для этого предназначен. Он необходим для редеринга шаблона с контекстом.
from django.http import HttpResponse urlpatterns = patterns('', ... (r'^robots\.txt$', lambda r: HttpResponse("User-agent: *\nDisallow: /", mimetype="text/plain")) )
(r'^robots.txt$', 'django.views.static.serve', {'path':"/txt/robots.txt",'document_root': settings.MEDIA_ROOT,'show_indexes': False }),
LoadModule alias_module modules/mod_alias.so alias /robots.txt /full/path/to/robots.txt
Офлайн