如何在flask应用程序中使用jinja2创建同时也是for循环链接的标题?

2024-04-26 06:59:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图显示以数据帧格式返回的搜索结果,例如:

 data = {'title': ['Green Moon', 'Blue Dog', 'Orange Sun'],
         'url':  ['exampele.com/gm', 'example.com/bd', 'example.com/os'],
         'text': ['some string 1', 'some string 2', 'some string 3'}
 data = pd.DataFrame(data)

我想将每个标题显示为指向url的超链接,然后显示其下方的上下文

我曾尝试从每个列中创建列表,并使用for循环,但这不允许我创建超链接:

urls = data.url.tolist()
texts = data.text.tolist()
titles = data.title.tolist()

example.html

 {% extends 'base.html' %}

 {% block content %}
    {% for title in titles %}
       {{ title }}
    {% endfor %}
    {% for text in texts %}
       {{ text }}
    {% endfor %}
 {% endblock %}

每个标题指向指定url的预期输出:

 Green Moon
 some string 1

 Blue Dog
 some string 2

 Orange Sun
 some string 3

Tags: textcomurlfordatastringtitleexample
2条回答

如果您希望标题是超链接,那么将它们包装在标记中就足够了。比如:

在您的应用程序中,添加:app.jinja_env.globals.update(zip=zip)(这允许您在模板中按this answer使用zip)

然后在模板中:

{% for title, url in zip(titles, urls) %}
<a href={{url}}><h1>title</h1></a>
{% endfor %}

我认为这里不需要熊猫^带有未打包值的{}应该会有所帮助

Ex:

data = {'title': ['Green Moon', 'Blue Dog', 'Orange Sun'],
         'url':  ['exampele.com/gm', 'example.com/bd', 'example.com/os'],
         'text': ['some string 1', 'some string 2', 'some string 3']}

data = list(zip(*data.values()))

{% extends 'base.html' %}

{% block content %}
   {% for title, url, text in data %}
      <a href={{url}}>{{title}}</a>
      <p>{{text}}</p>
   {% endfor %}
{% endblock %}

按注释编辑

data = {'title': ['Green Moon', 'Blue Dog', 'Orange Sun'],
         'url':  ['exampele.com/gm', 'example.com/bd', 'example.com/os'],
         'text': ['some string 1', 'some string 2', 'some string 3']}
data = pd.DataFrame(data)
data = data.apply(pd.Series.explode).to_dict(orient='records')

{% block content %}
   {% for item in data %}
      <a href={{item.url}}>{{item.title}}</a>
      <p>{{item.text}}</p>
   {% endfor %}
{% endblock %}

相关问题 更多 >