如何在Django模板中进行解析?

0 投票
2 回答
660 浏览
提问于 2025-04-16 07:58
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 %} 来获取你想要的信息。

撰写回答