您可以使用这个 sn-p: Capture template output as a variable 并定义一个 new filter 来删除“][”或其中的任何内容。
示例(在您的templatetags 目录中的文件中):
from django import template
from django.template.defaultfilters import stringfilter
register = template.Library()
@register.tag(name='captureas')
def do_captureas(parser, token):
try:
tag_name, args = token.contents.split(None, 1)
except ValueError:
raise template.TemplateSyntaxError("'captureas' node requires a variable name.")
nodelist = parser.parse(('endcaptureas',))
parser.delete_first_token()
return CaptureasNode(nodelist, args)
class CaptureasNode(template.Node):
def __init__(self, nodelist, varname):
self.nodelist = nodelist
self.varname = varname
def render(self, context):
output = self.nodelist.render(context)
context[self.varname] = output
return ''
@register.filter(name='join_my_tags')
@stringfilter
def join_my_tags(text):
return text.replace(' ][ ', '')
用法(在您看来):
{% captureas my_tags %}{% tag_one "1A" "1B" %}{% tag_two "2A" %}{% endcaptureas %}
{{my_tags|join_my_tags}}
未经测试的替代方法:它不需要任何模板标签,但如果您想避免附带影响(例如弄乱您的 javascript 代码),您必须在替换时非常有选择性。它与您的尝试类似,但在渲染之后执行,而不是之前。
以这种方式修改您的视图:
from django.shortcuts import render
def index(request):
myresponse = render(request, 'index.html') # add your context object if you need it
return HttpResponse(myresponse.content.replace(' ][ ', '')) # you may eventually use regex or eventually even a full html parser (!) but please take performances in account :)