Как обрабатывать теги django url в контекстных переменных - PullRequest
0 голосов
/ 27 мая 2019

Я создаю веб-сайт на основе 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

Ответы [ 2 ]

0 голосов
/ 27 мая 2019

Давайте посмотрим, правильно ли я вас понял, вы хотите, чтобы django показывал вам URL как таковой, а не как обычный текст?

Если вы хотите, чтобы django не показывал вам данные в виде простого текста, выможно использовать escape-фильтр следующим образом: {{string |escape}}

Проверьте эту страницу для получения более подробной информации о фильтрах и тегах django

0 голосов
/ 27 мая 2019

ваш URL будет иметь имя, как показано ниже: путь ('page //', PageView.as_view, name = "page-detail")

и в вашей детали страницы

надеюсь, это то, что вы просите

...