django - 如何在 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" %}
解决方案
您要实现的是使用字符串或 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 中加载所需的模块,例如“静态”。
推荐阅读
- android - 如何解决无法恢复密钥,android studio 4.1.3
- arrays - 访问第一列之前列的矩阵中的值?
- google-apps-script - 使用 .gs 获取谷歌表中的最新值或范围内的最后一个值
- ios - 计时器运行并更改标签文本时重新应用约束
- spring-boot - 如何从 Springboot 读取 Windows 共享文件夹中的文件?
- reactjs - 将 React js 与现有的 laravel 项目合并
- python - Python Lambda 函数成功,但未显示任何行已更新
- c# - C# 架构指南 - 批处理作业
- arrays - 我如何初始化@Binding SwiftUi
- html - 如何将图像数据从 html 表单获取到烧瓶?