在烧瓶中打印多个图像(每行)

时间:2017-07-22 21:55:10

标签: python python-3.x web flask praw

我在使用我构建的应用程序时遇到问题。基本上它的作用是如果它检测到字符串中的国家名称(submission.title),那么它将在标题后打印该国家的标志。因此,如果标题是“中国正在制造一枚火箭”。在火箭这个词后面会打印中国国旗。 问题是它不会打印多个标志。因此,如果标题是“中国和俄罗斯正在制造火箭”。它只会打印中国国旗或俄罗斯国旗。不是都。我希望它能够打印两个标志。

谢谢

Python脚本

SELECT  sg.[id] ,
        sg.[student_id] ,
        sg.[test] ,
        sg.[grade] ,
        s.[first_name] ,
        s.[last_name] ,
        s.[email] ,
        s.[phone] ,
        s.[birthdate]
INTO    TableA
FROM    student_grades sg
        JOIN students s ON sg.student_id = s.id;

HTML

news = []
i = 0
for submission in redditFunction(time, limit=int(num) ):
    i += 1
    for j in country: #j = country name
        if j in submission.title: 
            flag = "static/flags/" + country[j].lower() + ".png"
            news.append([str(i) + '. ' + submission.title, submission.url, flag] )
            break
    else:
        news.append([str(i) + '. ' + submission.title, submission.url]) #no flag will be printed

return render_template("index.html", news=news)

2 个答案:

答案 0 :(得分:1)

国家/地区循环中的

break阻止您拥有所有标记。

由于每个项目可能有多个标记,因此您应使用list在项目对象中保留相关的标记网址(您将其实现为list

查看

news = []
i = 0
for submission in redditFunction(time, limit=int(num)):
    i += 1

    # flags list will be empty in case of no match
    flags = []
    for j in country: #j = country name -- consider renaming 'j' to 'country_name'
        if j in submission.title:  # you may consider checking with lower()/upper()
            flags.append("static/flags/" + country[j].lower() + ".png")

    news.append([str(i) + '. ' + submission.title, submission.url, flags])

return render_template("index.html", news=news)

在模板中有一个标志列表,你只需要迭代它并为每个标志添加一个img元素。

<强>模板

{% for item in news %}
    <h2>
        <a href= "{{item[1]}}">{{item[0]}}</a>
        {% for flag in index[2] %}
            <img src= "{{ flag }}"  style="width:25px;height:18.25px;">
        {% endfor %}
    </h2> 
{% endfor %}

请注意,我没有测试过该解决方案,如果您遇到错误,请告诉我。

答案 1 :(得分:1)

我建议将此逻辑移到您的视图逻辑中并保持控制器简单。

# controller
return render_template('index.html', 
                       submissions=redditFunction(time, limit=int(num)),
                       countries=countries)

# view 
{% for submission in submissions %}

<h2>
    <a href="{{ submission.url }}">{{loop.index}}. {{submission.title}}</a>
    {% for country in countries %}
        {% if country in submission.title %}
            {% set country_path = 'flags/%s.jpg' % country %}
            <img src={{ url_for('static', filename=country_path) }}>
        {% endif %}
    {% endfor %}

</h2>
{% endfor %}

这使您的视图逻辑更容易理解。否则,您必须返回以重新引用item[0]item[1]。你也可以在Jinja得到一些不错的东西,如loop.index来创建编号的标题。

我在Flask中进行了测试,看起来工作正常。