Django templatetags模板,将{{}}}方法调用与模板标记上下文变量组合起来

2024-05-20 22:21:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图使一个模板标记的结果依赖于另一个模板标记。用例如下。我有一个标题列表,其中包含我想在表中显示的所有列+它们所显示的模型的列+它们是否可见。在

LIST_HEADERS = (
    ('Title', 'title', True),
    ('First Name', 'first_name', True),
    ('Last Name', 'last_name', True),
    ('Modified At', 'modified', False),
)

现在我有一个templatetag,它可以打印出所有的标题。因此,我想创建一个模板标记,打印出表的主体。因此,我想获取headers列表并检查哪个header可见,并相应地显示或隐藏我的值。在

因此,我在下面创建了templatetag模板:

^{pr2}$

您可以看到值{model_实例.标题}}在那里。我想把这个值改成model_实例.标题,型号_instance.first_名称,型号_instance.last_名称, ... 在运行时。在

因此,我正在寻找一种方法,如何将{model}instance}与header.model_列. 在

model_列等于列表\u标题中的第二个条目。因此,模型栏应该是标题,名字,。。在

因此,解决方案将类似于[伪代码]{模型_instance.header.model_列}}[伪代码]

…因此,我寻找一种方法,如何将django模板方法调用与django template标记属性结合起来..嗯。。听起来很疯狂:D

我希望我解释得足够好!也许有一个更容易解决我的问题的办法。但在我看来,这似乎很普通,很简单,而且很管用。在


Tags: 方法instancename标记模型模板true标题
2条回答

简化这个。在

首先,阅读一下Django模板语言实际上可以做的事情。不多。它可以区分变量、列表和字典。在

如果您在视图函数中完成所有“工作”,则会更简单。在

show = [ ]
for  title, field_name, visible in LIST_HEADERS:
     if visible: style= "visibility:hidden"
     else: style= ""
     show.append( (style, title, getattr(object,field_name) )
render_to_response( "template", { 'show_list': show, ... }, ... )

在模板中

^{pr2}$

实际上,我建议从视图函数中删除LIST_头。在

show = [ 
    ("", 'Title', object.title),
    ("",'First Name', object.first_name),
    ("",'Last Name', object.last_name),
    ("visibility:hidden",'Modified At', object.modified),
]
render_to_response( "template", { 'show_list': show, ... }, ... )

我发现上面的代码更容易处理,因为它是显式的,并且在view函数中。在

我将把它作为一个过滤器来做,因为它们提供了一种简单的方法来呈现依赖于变量值的结果。在

@register.filter
def field_from_name(instance, field_name):
    return getattr(instance, field_name, None)

然后在模板中:

^{pr2}$

相关问题 更多 >