gpt4 book ai didi

python - 是否可以使用 Django 模板处理器处理任意内容?

转载 作者:太空宇宙 更新时间:2023-11-03 17:44:12 29 4
gpt4 key购买 nike

我的网络应用程序包含横幅服务 API。

精简横幅模型:

class Banner(models.Model):
name = models.CharField(max_length=50)
ad_tag = models.TextField()
active = models.BooleanField(default=True)
priority = models.IntegerField(null=True, blank=False)

def __unicode__(self):
return self.name

横幅服务 API 接受一些 GET 参数,并根据这些参数返回一个 Django 模板,该模板吐出上面的 ad_tag TextField。 ad_tag 字段是横幅的 HTML:

<!-- ... -->
<body>
{{ ad_tag|safe}}
</body>

我的问题:我想使用 Django 模板处理器处理 ad_tag 字段的内容,这样我就可以使用 include、模板逻辑等。是这样吗可能的?

最佳答案

我成功使用 following snippet by GitHub user mhulse 。这使我能够在模板中调用 {% allowed_tags ad_tag %} 并处理在该字段中找到的任何 Django 模板标签。

from django import template
from django.utils.safestring import mark_safe

register = template.Library()

# https://surdu.me/2011/02/18/set-variable-django-template.html
# http://djangosnippets.org/snippets/861/
# http://stackoverflow.com/questions/4183252/what-django-resolve-variable-do-template-variable
# https://docs.djangoproject.com/en/dev/ref/templates/api/

@register.tag
def allow_tags(parser, token):

"""
Example: {% allow_tags page.content %}
"""

try:
# Splitting by None == splitting by spaces:
tag_name, var_name = token.contents.split(None, 1)
except ValueError:
raise template.TemplateSyntaxError, '%r tag requires arguments' % token.contents.split()[0]

return RenderNode(var_name)
allow_tags.is_safe = True

class RenderNode(template.Node):

def __init__(self, content):
self.content = content

def render(self, context):
try:
content = template.Variable(self.content).resolve(context)
return template.Template(content).render(template.Context(context, autoescape=False))
except template.TemplateSyntaxError, e:
return mark_safe('Template error: There is an error one of this page\'s template tags: <code>%s</code>' % e.message)

关于python - 是否可以使用 Django 模板处理器处理任意内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30065209/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com