首页 > 解决方案 > 如何在 Django 模型的 TextField 中使用静态文件?

问题描述

我需要在模型的 TextField 中显示静态内容。

我尝试在模板中将 TextField 标记为安全,但它似乎不像其他模板标签那样解释它,只将其显示为原始 HTML。

从我的模板:

{{ project.content|safe }}

从我的模型:

content = models.TextField()

在我看来:

class ProjectView(generic.DetailView):
    model = Project
    context_object_name = "project"
    template_name = "projects/project.html"

我希望内容({% static "wdv101/koala/index.html" %})显示为静态内容的 url,但它显示为 {% static "wdv101/koala/index.html" %}

标签: djangodjango-modelsdjango-templates

解决方案


您要实现的是使用字符串或 project.content 作为模板。将其标记为保存意味着例如 Javascript 不会被转义,因此 i 将被执行。您可以使用自定义模板标签解决您的“问题”,该标签将您的内容变量作为输入,呈现它并返回呈现的 html。

自定义模板标签:

from django import template
from django.template import Template
from django.utils.html import mark_safe

register = template.Library()

@register.simple_tag(takes_context=True)
def in_template_renderer(context, template_string):
   template = Template(template_string)
   return mark_safe(template.render(context))

在模板中使用它:

{% load in_template_renderer %}

{% in_template_renderer project.content %}

不要忘记在 project.content 中加载所需的模块,例如“静态”。


推荐阅读