输出HTML无序列表python

时间:2017-03-27 15:37:11

标签: python html string

我正在尝试使用python编写一个函数,该函数将获取我已定义的字符串列表,并将它们显示为单个字符串,即所有字符串的HTML无序列表。到目前为止,我的代码是:

def pizzatoppings(self):
    toppings = ['mushrooms', 'peppers', 'pepparoni', 'steak', 'walnuts', 'goat cheese', 'eggplant', 'garlic sauce'];
    for s in toppings:
        ul += "<li>"+str(s)+"</li>"
        ul += "</ul>"
        return ul

当我试图运行它时,我没有回溯,也没有任何反应。有谁知道为什么会这样?我知道这可能是一个微不足道的问题,但我已经找到了答案,但找不到解决方案。谢谢!

3 个答案:

答案 0 :(得分:3)

你可以这样做:

def print_ul(elements):
    print("<ul>")
    for s in elements:
        ul = "<li>" + str(s) + "</li>"
        print(ul)
    print("</ul>")

toppings = ['mushrooms', 'peppers', 'pepparoni', 'steak', 'walnuts', 'goat cheese', 'eggplant', 'garlic sauce'];
print_ul(toppings)

您的原始代码存在一些问题:

  • 你没有调用这个函数,所以难怪它没有做任何事情
  • 即使你这样做,该功能实际上并没有打印任何东西,只是返回了一些值
  • 该函数并没有真正接受参数,因此它根本无法重复使用

更好的(IMO)解决方案是拥有一个生成HTML代码的函数,并打印结果:

def ulify(elements):
    string = "<ul>\n"
    for s in elements:
        string += "<li>" + str(s) + "</li>\n"
    string += "</ul>"
    return string

print(ulify(['thing', 'other_thing']))

您还可以阅读list comprehensions。这将使列表更简单:

def ulify(elements):
    string = "<ul>\n"
    string += "\n".join(["<li>" + str(s) + "</li>" for s in elements])
    string += "\n</ul>"

答案 1 :(得分:1)

看起来你正在尝试建立一个网站。为什么不使用像Jinja 2这样的模板引擎,而不是从函数中打印HTML片段?为此,您需要一个Python Web应用程序,可以在其中一个Web框架中编写。我来这里Flask,开始使用起来很简单,Jinja是Flask的默认模板引擎。

如果您只想生成静态HTML文件,我建议使用Frozen-Flask,它允许您生成可以托管的静态HTML文件,而无需在服务器上部署任何Python Web应用程序。只需将生成的文件复制到您的主机,您就可以开始使用了。

如果您仍想打印HTML代码段,那么您的代码应该是Ealhad在其答案中发布的内容。

此外,您的原始代码包含一些问题:

def pizzatoppings(self):
    # you don't need semicolons in Python
    toppings = ['mushrooms', 'peppers', 'pepparoni', 'steak', 'walnuts', 'goat cheese', 'eggplant', 'garlic sauce']
    # you need to initialize a "ul" variable
    ul = "<ul>"
    for s in toppings:
        ul += "<li>"+str(s)+"</li>"
    # following two lines where indented too much. In Python, indentation defines a block of code
    ul += "</ul>"
    return ul

答案 2 :(得分:0)

我今天只是在工作中这样做。这是我的两行解决方案:

def example(elements):
    return '<ul>\n' + '\n'.join(['<li>'.rjust(8) + name + '</li>' for name in elements]) + '\n</ul>'

哪个给:

<ul>
    <li>mushrooms</li>
    <li>peppers</li>
    <li>pepparoni</li>
    <li>steak</li>
    <li>walnuts</li>
    <li>goat cheese</li>
    <li>eggplant</li>
    <li>garlic sauce</li>
</ul

这使生成的HTML代码更易于阅读。