【问题标题】:Python ljust not displaying properly when including a lin包含 lin 时,Python ljust 无法正确显示
【发布时间】:2012-09-19 06:28:54
【问题描述】:

我正在使用 Django 创建一个用于记录足球队的网站,我有一个带有 CSS 等的“漂亮”显示,但作为备份/旧学校版本,我试图让代码将信息写入基本的 .使用 rjust、ljust 等格式化文本的 html 文件。在下面的代码中,如果我删除链接代码,并且只显示团队名称的字符串,所有内容都正确排列。一旦我添加了链接的 HTML,尽管列没有对齐并且完全不正常。我做错了什么?

standings = Team.objects.filter(active=True).order_by('-wp')

output += '<pre>\n'  
output += '%s   %s   %s   %s\n' % (str('Rk').rjust(3), str('Team').ljust(50), str('W').rjust(2), str('L').rjust(2))
output += '%s   %s   %s   %s\n' % (str('--').rjust(3), str('----').ljust(50), str('-').rjust(2), str('-').rjust(2))

for row in mpi:
    the_team = "<a href=\"%s\">%s</a>" % (row.slug, row.name)
    output += '%s   %s   %s   %s\n' % (str(row.rank).rjust(3), str(the_team).ljust(50), str(row.won).rjust(2), str(row.lost).rjust(2))
output += '</pre>'

【问题讨论】:

  • 您意识到 the_team 变量中的整个锚标记是合理的,而不仅仅是 row.name 的值,对吗?不过,看到意外的输出会有所帮助。
  • 对,如果我在输出行中包含团队名称 %s 周围的锚标记,它将包含整行,包括 ljust 添加的空格。
  • 您应该考虑对字符串使用format 工具,例如"foo {:&gt;10s}".format("bar")。在文档中阅读它!
  • 感谢@hochl。我实际上将我的代码修改为下面的示例。我仍然不确定如何在不链接整个字符串和额外空格的情况下获取锚标记。 output += '{:&gt;3} &lt;a href="/ncaa-football/"&gt;{:&lt;30}&lt;/a&gt; {:&gt;2} {:&gt;2} {:^9} {:^6} ({:&gt;3}) {:&lt;40}\n'.format(row.rank, row.team.name, row.won, row.lost, mpi, sos, row.sos_rank, conference)

标签: python string format


【解决方案1】:

字符串"&lt;a href=\"%s\"&gt;%s&lt;/a&gt;" 包含一些未在浏览器上呈现的字符,您正在格式化源代码,而不是可视化。

str(row.the_team).ljust(50) 替换为str(row.the_team).ljust(50+len(row.slug)+15),因为有15 个不可见字符(即&lt;a href=""&gt;&lt;/a&gt;)加上slug。

更新:您可能想要删除一些str。如果某个值已经是字符串,则无需再次(重新)将其转换为字符串。您也可以将长行拆分为较短的行。

output = '<pre>\n'
output += '%s %s%s%s\n' % ('Rk'.rjust(3), 'Team'.ljust(50), 'W'.rjust(2), 'L'.rjust(2))
output += '%s %s%s%s\n' % ('--'.rjust(3), '----'.ljust(50), '-'.rjust(2), '-'.rjust(2))

for team in teams:
    link = '<a href="%s">%s</a>' % (team.slug, team.name)
    link = link.ljust(50 + len(team.slug) + 15)
    rank, won, lost = str(team.rank).rjust(3), str(team.won).rjust(2), str(team.lost).rjust(2)
    output += '%s %s%s%s\n' % (rank, link, won, lost)
output += '</pre>'
print output

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-12-05
    • 2021-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-26
    • 1970-01-01
    相关资源
    最近更新 更多