【问题标题】:How to process django url tags in context variables如何处理上下文变量中的 django url 标签
【发布时间】:2019-10-12 14:31:36
【问题描述】:

我正在创建一个基于 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 on another question,我能够找到第二个选项的解决方案。使用该 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

【问题讨论】:

    标签: django django-templates django-urls


    【解决方案1】:

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

    在您的页面详情中

    希望这是你的要求

    【讨论】:

      【解决方案2】:

      让我看看我是否理解你,你想让 django 向你显示一个这样的网址而不是纯文本吗?

      如果你想避免 django 将数据显示为纯文本,你可以使用如下的转义过滤器:{{string |逃脱}}

      查看this page 了解有关 django 过滤器和标签的更多详细信息

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-04-12
        • 1970-01-01
        • 2014-02-04
        • 1970-01-01
        • 1970-01-01
        • 2012-12-12
        • 1970-01-01
        • 2014-01-15
        相关资源
        最近更新 更多