如何在Django模板中进行解析?
post = { sizes: [ { w:100, title="hello"}, {w:200, title="bye"} ] }
假设我把这个传递给我的Django模板。现在,我想在宽度为200的地方显示标题。我该怎么做,避免使用笨办法:
{{ post.sizes.1.title }}
我想用解析的方式来实现。
2 个回答
0
在编程中,有时候我们会遇到一些问题,可能是因为代码写得不够好,或者是我们对某些概念理解得不够透彻。比如,有人可能在使用某个库的时候,发现它的功能和自己想要的不太一样,这时候就需要仔细查看文档,了解这个库的使用方法和限制。
另外,调试代码也是一个很重要的环节。调试就是找出代码中出错的地方,看看为什么会出错。这个过程可能会很麻烦,但也是学习编程的一部分。通过调试,我们可以更深入地理解代码是如何工作的。
总之,编程是一门需要不断学习和实践的技能,遇到问题时不要气馁,多查资料,多动手试试,慢慢就能掌握了。
{% for i in post.sizes %}
{% if i.w == 200 %}{{ i.title }}{% endif %}
{% endfor %}
2
一个很简单的方法是使用过滤器模板标签。
from django.template import Library
register = Library()
@register.filter('titleofwidth')
def titleofwidth(post, width):
"""
Get the title of a given width of a post.
Sample usage: {{ post|titleofwidth:200 }}
"""
for i in post['sizes']:
if i['w'] == width:
return i['title']
return None
这个代码应该放在一个叫做 templatetags
的包里,比如命名为 postfilters.py
,然后在你的模板中使用 {% load postfilters %}
来加载它。
当然,你也可以修改这个代码,让它返回正确的 sizes
对象,这样你就可以使用 {% with post|detailsofwidth:200 as postdetails %}{{ postdetails.something }}, {{ postdetails.title }}{% endwith %}
来获取你想要的信息。