V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
evenkevin
V2EX  ›  Project Babel

看了v2ex的源码,发现一个问题

  •  
  •   evenkevin · 2010-12-27 11:33:18 +08:00 · 6698 次点击
    这是一个创建于 5107 天前的主题,其中的信息可能已经有所发展或是发生改变。
    在filters.py里
    def clly(value):
    imgs = re.findall('(http://cl.ly/[a-zA-Z0-9]+)\s?', value)
    if (len(imgs) > 0):
    for img in imgs:
    img_id = re.findall('http://cl.ly/([a-zA-Z0-9]+)', img)
    if (img_id[0] != 'demo' and img_id[0] != 'whatever'):
    value = value.replace('http://cl.ly/' + img_id[0], '<a href="http://cl.ly/' + img_id[0] + '" target="_blank"><img src="http://cl.ly/' + img_id[0] + '/content" class="imgly" border="0" /></a>')
    return value
    else:
    return value
    register.filter(clly)
    对图片的解析是替换的,如果同时放两张同样的图片地址,估计会有问题。
    用了一张坛子里的图片试一下
    " target="_blank">/content" class="imgly" border="0" />
    " target="_blank">/content" class="imgly" border="0" />
    12 条回复    1970-01-01 08:00:00 +08:00
    evenkevin
        1
    evenkevin  
    OP
       2010-12-27 11:34:27 +08:00
    这里因为是replace,所以生成的img html里的链接也会被循环调用了.
    reorx
        2
    reorx  
       2010-12-27 11:49:22 +08:00
    每一个链接都是在for循环中单独处理的,个人认为不会出问题。
    evenkevin
        3
    evenkevin  
    OP
       2010-12-27 12:29:28 +08:00
    但事实上我只在帖子里放了两个链接,但是出来四张图片,而生成的html里有6个img的tag
    vayn
        4
    vayn  
       2010-12-27 14:06:12 +08:00
    出现两张同样的图片会反复替换,将替换过的链接里的 Url 再次替换才会变成这个样子。确实是个 bug。
    Livid
        5
    Livid  
    MOD
       2010-12-27 14:19:43 +08:00 via iPhone
    用户在什么情况下会需要贴两个一模一样的 URL?

    我觉得这是贴的人的问题,没有必要为了这种人为制造出来的“bug”而增加实现的复杂度。
    evenkevin
        6
    evenkevin  
    OP
       2010-12-27 16:02:17 +08:00
    你的逻辑也没问题,只是在无意中发现的问题,告知一下。
    xinzhi
        7
    xinzhi  
       2010-12-27 17:16:12 +08:00
    有一次发很多图片的时候不小心弄重复了,结果帖子一塌糊涂。
    reorx
        8
    reorx  
       2010-12-27 17:22:03 +08:00
    @evenkevin 似乎是这样的,学习了。
    lepture
        9
    lepture  
       2010-12-27 17:46:49 +08:00
    re.sub is better.
    evenkevin
        10
    evenkevin  
    OP
       2010-12-27 19:39:46 +08:00
    这个也挺好解决,遍历时对于重复的照片只循环一次,下面是个解决方案,可能是个笨办法...
    if (len(imgs) > 0):
    for img in imgs:
    repeat_num = imgs.count(img)
    if repeat_num > 1:
    if img_repeat.has_key(img):
    continue
    else:
    img_repeat[img] = repeat_num
    value = value.replace('http://cl.ly/' + img_id[0], '<a href="http://cl.ly/' + img_id[0] + '" target="_blank"><img src="http://cl.ly/' + img_id[0] + '/content" class="imgly" border="0" /></a>')
    return value
    ....
    darcy
        11
    darcy  
       2010-12-27 20:45:13 +08:00
    在某些文章中两个地方引用同一张图片是正常的用途,这个不是bug,是由使用者决定的。
    c
        12
    c  
       2010-12-27 21:47:39 +08:00
    http://v2ex.appspot.com/t/6401

    这里写了个demo,也许可以解决楼主的问题。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   4189 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 33ms · UTC 10:10 · PVG 18:10 · LAX 02:10 · JFK 05:10
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.