【发布时间】: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 %}
为清楚起见进行编辑:
编辑 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