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

2010-12-27 11:33:18 +08:00
 evenkevin
在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)
对图片的解析是替换的,如果同时放两张同样的图片地址,估计会有问题。
用了一张坛子里的图片试一下
http://cl.ly/003y0R440T1L073n3k1U
http://cl.ly/003y0R440T1L073n3k1U
6546 次点击
所在节点    Project Babel
12 条回复
evenkevin
2010-12-27 11:34:27 +08:00
这里因为是replace,所以生成的img html里的链接也会被循环调用了.
reorx
2010-12-27 11:49:22 +08:00
每一个链接都是在for循环中单独处理的,个人认为不会出问题。
evenkevin
2010-12-27 12:29:28 +08:00
但事实上我只在帖子里放了两个链接,但是出来四张图片,而生成的html里有6个img的tag
vayn
2010-12-27 14:06:12 +08:00
出现两张同样的图片会反复替换,将替换过的链接里的 Url 再次替换才会变成这个样子。确实是个 bug。
Livid
2010-12-27 14:19:43 +08:00
用户在什么情况下会需要贴两个一模一样的 URL?

我觉得这是贴的人的问题,没有必要为了这种人为制造出来的“bug”而增加实现的复杂度。
evenkevin
2010-12-27 16:02:17 +08:00
你的逻辑也没问题,只是在无意中发现的问题,告知一下。
xinzhi
2010-12-27 17:16:12 +08:00
有一次发很多图片的时候不小心弄重复了,结果帖子一塌糊涂。
reorx
2010-12-27 17:22:03 +08:00
@evenkevin 似乎是这样的,学习了。
lepture
2010-12-27 17:46:49 +08:00
re.sub is better.
evenkevin
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
2010-12-27 20:45:13 +08:00
在某些文章中两个地方引用同一张图片是正常的用途,这个不是bug,是由使用者决定的。
c
2010-12-27 21:47:39 +08:00
http://v2ex.appspot.com/t/6401

这里写了个demo,也许可以解决楼主的问题。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/6371

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX