Python django templatetags模板,将{{}}方法调用与模板标记上下文变量组合
我试图使一个模板标记的结果依赖于另一个模板标记。用例如下所示。我有一个标题列表,其中包含我想在表中显示的所有列+它们正在显示的模型的列+它们是否可见Python django templatetags模板,将{{}}方法调用与模板标记上下文变量组合,python,django,Python,Django,我试图使一个模板标记的结果依赖于另一个模板标记。用例如下所示。我有一个标题列表,其中包含我想在表中显示的所有列+它们正在显示的模型的列+它们是否可见 LIST_HEADERS = ( ('Title', 'title', True), ('First Name', 'first_name', True), ('Last Name', 'last_name', True), ('Modified At', 'modified', False), ) 现在我有了一个
LIST_HEADERS = (
('Title', 'title', True),
('First Name', 'first_name', True),
('Last Name', 'last_name', True),
('Modified At', 'modified', False),
)
现在我有了一个templatetag,它可以打印出所有的标题。因此,我想创建一个模板标记,用于打印表体。因此,我希望获取标题列表并检查哪个标题是可见的,并希望相应地显示或隐藏我的值
因此,我在下面创建了templatetag模板:
<tr class="{% cycle odd,even %}">
{% for header in headers %}
{% if header.visible %}
<td><a href="{{ model_instance.get_absolute_url|escape }}">{{ model_instance.title }}</a></td>
{% else %}
<td style="visibility:hidden;"><a href="{{ model_instance.get_absolute_url|escape }}">{{ model_instance.title }}</a></td>
{% endif %}
{% endfor %}
</tr>
{headers%中的头的%s}
{%if header.visible%}
{%else%}
{%endif%}
{%endfor%}
您可以在那里看到值{model_instance.title}。我要将此值更改为model_instance.title、model_instance.first_name、model_instance.last_name。。。在运行时
因此,我正在寻找一种方法,如何将{{model_instance}}与header.model_列结合起来
model_列等于列表_标题中的第二个条目。因此,model_列将是title,first_name
因此,解决方案类似于[pseudocode]{{model_instance.header.model_column}}[pseudocode]
…因此,我寻找一种方法,如何将django模板方法调用与django模板标记属性结合起来..嗯。。听起来很疯狂:D
我希望我解释得足够好!也许有一个更容易解决我的问题的办法。但在我看来,这似乎相当通用和简单,并将工作 我将把它作为一个过滤器来做,因为它们提供了一种简单的方法来呈现依赖于变量值的结果
@register.filter
def field_from_name(instance, field_name):
return getattr(instance, field_name, None)
然后在模板中:
{{ model_instance|field_from_name:header.model_column }}
我将把它作为一个过滤器来做,因为它们提供了一种简单的方法来呈现依赖于变量值的结果
@register.filter
def field_from_name(instance, field_name):
return getattr(instance, field_name, None)
然后在模板中:
{{ model_instance|field_from_name:header.model_column }}
简化这一点
首先,阅读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, ... }, ... )
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, ... }, ... )
在模板中
{% for style, name, value in show_list %}
<tr class="{% cycle odd,even %}">
<td class="{{style}}"><a href="...">{{value}}</a></td>
{% endfor %}
我发现上面的代码更容易使用,因为它是显式的,并且在视图函数中。简化它
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, ... }, ... )
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, ... }, ... )
首先,阅读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, ... }, ... )
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, ... }, ... )
在模板中
{% for style, name, value in show_list %}
<tr class="{% cycle odd,even %}">
<td class="{{style}}"><a href="...">{{value}}</a></td>
{% endfor %}
我发现上面的内容更容易使用,因为它是显式的,并且在视图函数中。+1在视图中做得更多,在模板中做得更少。这会让一切更具可读性。哇。。印象深刻。太快了。。我从你的帖子中学到了很多。在视图中做得更多,在模板中做得更少。这会让一切更具可读性。哇。。印象深刻。太快了。。我从你的帖子中学到了很多。
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, ... }, ... )
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, ... }, ... )