Я создаю веб-сайт на основе django, где содержимое страницы хранится в текстовом поле модели с подробным представлением модели, отображающей его. Как я могу поместить теги {% url%} в контент, чтобы ссылаться на другие страницы без жестких кодирующих ссылок?
Помещение тега в текстовое поле будет просто печатать тег в виде простого текста. (или если внутри href создать неработающую ссылку)
Другие варианты
- синтаксический анализ содержимого внутри представления и замена тегов на правильный URL-адрес
- с использованием некоторого анализатора строк, поставляемого django, для создания ссылок перед отправкой в шаблон
- возможно, есть способ сделать это в шаблоне с помощью фильтра или тега вокруг переменной.
Я, вероятно, мог бы поступить вручную, но я надеюсь, что есть способ, который мне не хватает.
class Page(models.Model):
content = models.TextField(blank=True)
class PageView(DetailView):
model=Page
context_object_name='page'
{% extends "base.html" %}
{% block content %}
{{ page.content|safe }}
{% endblock %}
Изменить для ясности:
Содержание в админке
Что это делает
Что это должно сделать
Редактировать 2:
Мне удалось найти решение по второму варианту благодаря этому ответу на другой вопрос. Используя эту функцию template_from_string, я рендерил содержимое страницы как шаблон, а затем заменил содержимое в контексте на результат рендеринга.
class PageView(DetailView):
model=Page
context_object_name='page'
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
# Add to context here
context['page'].content = template_from_string(context['page'].content).render(context)
return context