Django: Могу ли я добавить заголовок noindex к ответу redirect?

Я могу использовать robots.txt и пользовательское промежуточное ПО Django, но мне хотелось бы знать, можно ли это сделать на уровне представления.

3 ответа

Поскольку вы, вероятно, будете делать это довольно часто, вы можете превратить его в декоратор.

декораторы.py

      def robots(content="noindex, nofollow"):
    
    def _method_wrapper(func):
        
        @wraps(func)
        def wrap(request, *args, **kwargs):
            response = func(request, *args, **kwargs)
            response['X-Robots-Tag'] = content
            return response

        return wrap
        
    return _method_wrapper

просмотры.py

      from .decorators import robots

@robots("noindex")
def something(request):
    return HttpResponse("")

@robots("all")
def something_else(request):
    return HttpResponse("")

Если вы используете представления на основе классов, вы также можете создать миксин:

mixins.py

      class NoIndexRobotsMixin:
    def dispatch(self, request, *args, **kwargs):
        response = super().dispatch(request, *args, **kwargs)
        response['X-Robots-Tag'] = 'noindex'
        return response

просмотры.py

      class MyView(NoIndexRobotsMixin, generic.View):
    pass

Вы можете добавить тег noindex, используя следующий фрагмент:

from django.http import HttpResponse

response = HttpResponse("Text only, please.", content_type="text/plain")
response['X-Robots-Tag'] = 'noindex'
return response
Другие вопросы по тегам