繁体   English   中英

如何循环打印图像 html 下面分享代码

[英]How to print images in a loop in html the code is shared below

我已经通过 python 制作了一个图像url循环,现在我想使用所有图像url在 html 页面上显示所有图像,我正在使用jinja for 循环。

我在这里做错了什么,需要一些帮助

import boto3
session = boto3.Session( 
         aws_access_key_id='my_key', 
         aws_secret_access_key='My_key')


s3 = session.client('s3')
objects = s3.list_objects_v2(Bucket='My_bucket')

for obj in objects['Contents']:
    print("\n")
    print(obj['Key'])
    print("\n")
    url = s3.generate_presigned_url(ClientMethod='get_object',Params={'Bucket': "My_bucket", 'Key': obj['Key'], },ExpiresIn=36000,)
    print(url)

f = open('index.html','w')

message = """<!DOCTYPE html>
<html>

<head>
    <title>sahil</title>
</head>

<body>

    <table>
        <tr>
            
            <td>
            <ul>
    {% for urls in url %}
        <li>{{ <img src="urls"> }}</li>
    {% endfor %}
            </ul>

            </td>
            
        </tr>
    </table>
    

</body>

</html>"""

f.write(message)
f.close()

您的代码有两个主要问题:

您绝不会渲染 Jinja 模板。 这意味着message变量按原样、Jinja 指令和所有内容写入文件。 最重要的是,由于您实际上并没有保存在 Python 循环中生成的每个 URL,因此如果您确实渲染了此模板,它将对您生成的最终 URL 的每个字符进行操作,这不太有用。 嗯,如果你修复了模板中的错误,因为它试图执行一些 HTML。

本例中还有其他小问题的评论。 也就是说,在代码中包含 AWS 机密并不是一个小问题。 不要那样做。 这是 AWS 机密泄露到野外的一个非常普遍的原因。 你现在真的应该改掉那个习惯,以免它给你带来麻烦。

import boto3
# Bring in the Template enging from Jinja
from jinja2 import Template

# NEVER store AWS secrets in code.  Use one of the options available at
# https://boto3.amazonaws.com/v1/documentation/api/latest/guide/configuration.html
session = boto3.Session()
s3 = session.client('s3')

# Create a pagination helper to get all objects if there are more than 1000
paginator = s3.get_paginator('list_objects')
# Store the generated URLs in an array
urls = []
for objects in paginator.paginate(Bucket='My_bucket'):
    # Pull out the Contents for this page, it may not be present, so default to
    # an empty list if this page has no items
    for obj in objects.get('Contents', []):
        # Note: Prevent problems by using the bucket name from the list_objects request
        url = s3.generate_presigned_url(ClientMethod='get_object',Params={'Bucket': objects['Name'], 'Key': obj['Key'], },ExpiresIn=36000,)
        # Add the new URL to the list of URLs
        urls.append(url)

# Use with block to let Python manage the lifespan of the file object
with open('index.html','w') as f:
    # Note: Compacting the HTML here just to make the example smaller
    message = """<!DOCTYPE html>
    <html><head><title>sahil</title></head>
    <body><table><tr><td><ul>
        {% for url in urls %}
            <!-- The jinja portion here is just the "url" variable, the rest is raw HTML -->
            <li> <img src="{{url}}"> </li>
        {% endfor %}
    </ul></td></tr></table></body></html>"""
    # Need to actually call jinja to render the HTML
    t = Template(message)
    # Pass in the urls list to the render engine
    f.write(t.render(urls=urls))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM