3

我已将字符串列表传递给我的 Jinja2 模板。我想将 Jinja2 用于join列表,但我还想将每个列表项转换为href. 有可能还是我需要以某种方式将链接传递给模板?

# I use this to join the list items.

{{ my_list|join(', ') }}

# I use this to make links individually

{% for i in my_list %}

    <a href="/edit/{{ i }}">i</a>

{% endfor %}

如何在加入之前/之后将项目转换为链接?

任何帮助都是极好的。

4

3 回答 3

10

使用loops的loop特殊变量for

{% for i in my_list %}
    <a href="/edit/{{ i }}">i</a>{% if not loop.last %}, {% endif %}
{% endfor %}

您也可以将其包装在宏中:

{% macro listlinks(mylist, urltemplate="/edit/%s", connective=", ") -%}
    {% for item in mylist -%}
        <a href="{{ urltemplate|format(item)|e }}">{{ item|e }}</a>
        {% if not loop.last %}{{ connective|e }}{% endif %}
    {%- endfor %}
{%- endmacro %}


{{ listlinks(list_of_ids) }}

但是,我建议您不要像@Demian 在他的回答中建议的那样在模板中构建路径名。最好通过一些抽象机制在模板之外构建路径名,例如 Pyramid 的request.route_url()系统,或者甚至只是来自控制器的元组。

于 2012-10-26T20:55:00.973 回答
1

我会tuple为此使用 s 列表。将它们传递到模板中,例如:

{
   'my_list': [
        ('a', 'a_href',),
        ('b', 'b_href',),
    ]
}

从您的模板中,您应该能够做到这一点:

{% for name, href in my_list %}
    <a href="{{href}}">{{name}}</a>
{% endfor %}
于 2012-10-09T07:09:03.833 回答
0

所以我不相信单独使用 Jinja2 是可能的。我最终修复它的方法是在 Python 中构建逗号分隔的锚标记列表,然后将其传递给 Jinja2。然后我不得不告诉 Jinja2 HTML 是safe.

从我的金字塔视图中返回:

result['list_string'] = ', '.join(['<a href="view/%s">i._name</a>' % i._id\
         for i in objects])
return result

然后在模板中:

{{ list_string|safe }}

工作正常。

于 2012-10-18T03:49:27.157 回答