Skip to main content
 首页 » 编程设计

python之如何解析 Django 模板并呈现特定标签

2024年08月30日27grandyang

是否可以解析 Django 模板并仅呈现特定标签? 这snippet接近我正在寻找的东西,但它不会返回整个模板。 基本上如果我有这个模板作为输入

<html> 
<title>{% block title%}{% endblock %}</title> 
<body> 
{% block content %} 
{% mycustomtag "args" %} 
{% endblock content %} 
</body> 
</html> 

我只想渲染 mycustomtag 这是我正在寻找的输出

<html> 
<title>{% block title%}{% endblock %}</title> 
<body> 
{% block content %} 
<p>Result from mycustomtag</p> 
{% endblock content %} 
</body> 
</html> 

谢谢。

请您参考如下方法:

如果我正确理解你的问题,那么有一种方法可以做到这一点,即使用 {% verbatim %} 标签。它将是 added in Django 1.5 , 但现在您可以将其用作您的自定义标签 - 这是来源:https://code.djangoproject.com/ticket/16318

这里唯一的缺点是你不能直接使用这个模板,它需要双重渲染。如果这是您所需要的 - 那么一切都很好。

要使用它,您需要做的就是用 {% verbatim %} 将其他标签括起来:

{% load my_custom_tags %}  <-- this is needed to load the 'verbatim' and 'mycustomtag' tags 
{% verbatim %} 
<html> 
<title>{% block title%}{% endblock %}</title> 
<body> 
{% block content %} 
{% endverbatim %} 
 
{% mycustomtag "args" %} 
 
{% verbatim %} 
{% endblock content %} 
</body> 
</html> 
{% endverbatim %} 

我用这个模板做了一个简单的测试:

@register.simple_tag 
def mycustomtag(a): 
    return "<p>%s</p>" % a 
 
.... 
 
from django.template import loader, Context 
print loader.get_template("test.html").render(Context({})) 

这将打印以下内容:

<html> 
<title>{%block title%}{%endblock%}</title> 
<body> 
{%block content%} 
 
<p>args</p> 
 
{%endblock content%} 
</body> 
</html> 

希望这对您有所帮助。