【发布时间】:2014-07-14 19:56:34
【问题描述】:
我试图用 django 制作可重用的界面组件。我能够使用自定义模板标签完成一些事情:
{% panel %}
Some panel content
{% endpanel %}
它工作正常,但我无法将面板标题作为参数传递。我真正想要的是:
{% panel 'Panel Title' %}
Some panel content
{% endpanel %}
我在文档中找不到此问题的答案。有没有办法实现它?如果没有,我可以使用其他策略吗?
编辑:请记住,面板内容应该在内部接受更多标记,就像其他标签和块一样。这就是为什么一个简单的模板标签对我来说是不够的。
详情
panel.html
<div class="panel panel-default">
<div class="panel-heading">{{ title|default:"Panel Title" }}</div>
<div class="panel-body">
{{ body }}
</div>
</div>
模板标签/theme.py
from django import template
register = template.Library()
@register.tag
def panel(parser, token):
nodelist = parser.parse(('endpanel',))
parser.delete_first_token()
return PanelNode(nodelist)
class PanelNode(template.Node):
def __init__(self, nodelist):
self.nodelist = nodelist
def render(self, context):
output = self.nodelist.render(context)
t = template.loader.get_template('theme/blocks/panel.html')
c = template.Context({'body': output})
return t.render(c)
【问题讨论】:
-
你为什么要创建一个类?一个功能还不够吗?
-
@MihaiZamfir 因为我是 pythoh/django 的新手,这就是它在文档中显示的方式(以及 django 代码本身)
-
也许
Django Subtemplates对你有好处。你在这里有一个很好的教程Including Templates with variables
标签: python django django-templates