如何在上下文变量中处理Django URL标签

时间:2019-05-27 02:09:08

标签: django django-templates django-urls

我正在创建一个基于django的网站,页面内容存储在模型文本字段中,并带有显示该模型的详细视图。如何在内容中放置{%url%}标签以链接到其他页面而无需硬编码链接?

将标签放入文本字​​段中只会将标签打印为纯文本。 (或者,如果在href内部创建一个损坏的链接)

其他选项是

  • 在视图内部手动解析内容,并用正确的url替换标签
  • 使用一些django提供的字符串解析器在发送到模板之前创建链接
  • 也许有一种方法可以在模板中使用变量周围的过滤器或标签。

我可能可以采用手动方式,但是我希望我缺少一种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 %}

为清楚起见进行编辑:

Content in admin

What it renders

What it should render

编辑2: 感谢this answer在另一个问题上,我能够找到第二种选择的解决方案。使用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 :(得分:0)

您的网址将具有如下所示的名称- path('page //',PageView.as_view,name =“ page-detail”)

以及您的页面详细信息

希望这是您的要求

答案 1 :(得分:0)

看看我是否了解您,您是否希望django向您显示这样的网址,而不是纯文本?

如果要避免django以纯文本形式显示数据,可以使用转义过滤器,如下所示:{{string |逃脱}}

检查this page以获得有关Django过滤器和标签的更多详细信息