Как сделать редактор сырого текстового файла (для редактирования robots.txt) в админке Django Wagtail

Задача состоит в том, чтобы создать редактор текстовых файлов в админке Wagtail. В частности для файла robots.txt. Я хочу, чтобы администратор мог обновлять файл из админки.

Как я могу это сделать?

Есть некоторые соображения по поводу того, что файл robots.txt попадает на ваш сервер и каждый раз считывает базу данных. Вероятно, вам захочется подумать о каком-то кэширующем слое, однако я ответил, предполагая, что вы решите эту проблему и просто хотите получить "редактор" Wagtail.

Wagtail предоставляет модуль contrib.settings, который позволяет вам иметь модель настроек для каждого сайта. Это очень полезный модуль, который позволяет пользователям, обычно только администраторам, изменять содержимое, которое специфично для сайта, но не соответствует идее "страницы".

https://docs.wagtail.org/en/stable/reference/contrib/settings.html

Модель настроек

  • В файле models.py вашего приложения - создайте новую модель настроек.
from django.db import models

from wagtail.admin.panels import FieldPanel
from wagtail.contrib.settings.models import BaseSetting, register_setting

@register_setting
class MySettings(BaseSetting):
    robots = models.TextField(blank=True)

    panels = [
        FieldPanel('robots'),
    ]

robots.txt view & template

  • Существует множество способов загрузить представление с robots.txt
  • .
  • В Аккордбоксе есть хорошее руководство по настройке представления robots.txt https://www.accordbox.com/blog/wagtail-seo-guide/#robotstxt
  • .
  • После того, как у вас есть представление, вы можете получить вывод настроек через класс модели.
# using in your view
def robots_view(request):
    robots = MySettings.for_request(request).robots
    ## return the content in your view
  • Альтернативно можно использовать в контексте шаблона через инжектированную переменную контекста шаблона
  • .
  • примечание: 'wagtail.contrib.settings.context_processors.settings' должен быть добавлен в context_processors
User-agent: *
{{ settings.app_label.MySettings.robots }}

Соображения

  • Если возможно, лучше всегда предоставлять здесь статический файл или, как минимум, сильно кэшировать это значение.
  • Валидация является обязательным условием - сделайте так, чтобы вашим редакторам было трудно сломать ваш сайт, помните, что поисковые системы просматривают его только полурегулярно, и нарушение этого условия может означать несколько дней исключения из списка или неработающие списки, если ваши редакторы не будут осторожны.
  • Обязательно нужны разрешения, может быть, даже двухэтапный процесс, чтобы как-то продвигать эти изменения?
  • Возможно, вы могли бы поместить поле robots в вашу HomePage модель и получить доступ к данным в представлении robots. Это как бы нарушает концепцию того, что эта модель отражает только главную страницу, но затем распространяется на "корневое" содержимое.
  • .
Вернуться на верх