如何同时打印两个列表?

时间:2018-08-16 11:18:55

标签: python django python-3.x

这是我在Django中的views.py文件

def twitter_trend(request):
    tweets, urls = main()
    context = {
        "tweets": tweets,
        "urls": urls,
    }
    print(context)
    return render(request, "feed/trends.html", context)

在我的模板中,我想同时打印趋势和网址的值。

这是我的模板文件

{% extends 'feed/base.html' %}
{% block content %}
<div class="row">
    <div class="col-md-3"></div>
    <div class="col-md-6">

    <div class="thumbnail-center">
                 <font size="4">
                     <p>Trending Tweets</p>
                 </font>
             </div>
        {% for t,u in tweets,urls %}
        {{ t }}{{ u }}<br>
        {% endfor %}

    </div>
    <div class="col-md-3"></div>
</div>
 {% endblock %}

但是当我运行服务器时,出现以下错误:

Exception Type:	TemplateSyntaxError
Exception Value:	
Could not parse the remainder: ',urls' from 'tweets,urls'

请帮助我如何迭代抛出两个列表?

1 个答案:

答案 0 :(得分:2)

您可以在视图中使用zip来创建一个同时迭代列表的迭代器:

def twitter_trend(request):
    tweets, urls = main()
    context = {
        'tweets_urls': zip(tweets, urls),
    }
    print(context)
    return render(request, "feed/trends.html", context)

然后在模板中,我们可以遍历tweets_url

{% extends 'feed/base.html' %}
{% block content %}
<div class="row">
    <div class="col-md-3"></div>
    <div class="col-md-6">

    <div class="thumbnail-center">
                 <font size="4">
                     <p>Trending Tweets</p>
                 </font>
             </div>
        {% for t, u in tweets_urls %}
        {{ t }}{{ u }}<br>
        {% endfor %}

    </div>
    <div class="col-md-3"></div>
</div>
 {% endblock %}

一个zip接收两个或更多流,并生成这些流的元组。例如:

>>> list(zip([1, 4, 2, 5], "ABCD"))
[(1, 'A'), (4, 'B'), (2, 'C'), (5, 'D')]

因此,我们创建元组,其中左边的项目是tweets元素,右边的是urls元素。

请注意,您必须确保{<1>}和tweets的顺序“ 匹配”:第 i 个{{ 1}}元素与第 i urls元素“相关”。 tweets只是采用两个可迭代对象的顺序,它没有任何“ 魔术”来检查链接这些元素是否有意义。