замена строки django-cms на выходе - PullRequest
0 голосов
/ 27 августа 2018

Для некоторых сайтов django-cms я хочу заменить каждое вхождение фиксированной строки (а именно, две звезды в ряду: "**") другой фиксированной строкой на выходе. При редактировании должна оставаться исходная строка. Идея в том, чтобы иметь очень короткий тег для частого использования.

Как мне этого добиться?

1 Ответ

0 голосов
/ 02 сентября 2018

Это можно сделать с помощью Middleware :

pattern = "**"
replacement = """<span class="gender" title="some explanation">*</span>"""

class SubstituteMiddleware:
    def __init__(self, get_response):
        self.get_response = get_response

    def __call__(self, request):
        response = self.get_response(request)
        if hasattr(response,"content"):
            response.content = response.content.replace(pattern,replacement)
        return response
  • Измените pattern и replacement в соответствии с вашими потребностями.
  • Поместите этот код в <yoursite>/middleware/sub.py (добавьте промежуточное ПО каталога с пустым __init__.py, если его еще нет)
  • Добавить <yoursite>.middleware.sub.SubstituteMiddleware в список MIDDLEWARE в settings.py

Обратите внимание, что этот подход несовершенен тем, что заменяет не только контент, но и случайно совпадающие части HTML-кода.

...