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

回复某人后@username中的username部分自动带链接是怎么实现的?

  •  
  •   paloalto · 2010-09-15 23:42:58 +08:00 · 4507 次点击
    这是一个创建于 5164 天前的主题,其中的信息可能已经有所发展或是发生改变。
    下面的这两部分代码是怎么实现回复某人后@username中的username部分自动带链接的?我死活没看出来。。

    <script type="text/javascript">
    // reply a reply
    function replyOne(nickname){
    replyContent = $("#reply_content");
    oldContent = replyContent.val();
    prefix = "@" + nickname + " ";
    newContent = ''
    if(oldContent.length > 0){
    if (oldContent != prefix) {
    newContent = prefix + oldContent;
    }
    } else {
    newContent = prefix
    }
    replyContent.focus();
    replyContent.val(newContent);
    }
    </script>

    ——————————————————————————————————

    <img src="/static/img/reply.png" align="absmiddle" border="0" alt="回复 {{ reply.member.username }}" onclick="replyOne('{{ reply.member.username }}')" class="clickable" />
    8 条回复    1970-01-01 08:00:00 +08:00
    eth2net
        1
    eth2net  
       2010-09-15 23:46:53 +08:00
    在 tpl/portion/topic_replies.html
    xinzhi
        2
    xinzhi  
       2010-09-15 23:54:32 +08:00
    你看到的js是处理回复部分的。

    /v2ex/v2ex/templatetags/filters.py里面还有个处理mentions的函数,发帖后就转换好存到数据库里了,不是后期用js处理的。
    paloalto
        3
    paloalto  
    OP
       2010-09-16 00:04:53 +08:00
    谢谢解答,我再去研究一下。
    dimlau
        4
    dimlau  
       2010-09-16 00:05:18 +08:00
    v2ex/templatetags/filters.py
    paloalto
        5
    paloalto  
    OP
       2010-09-16 00:25:31 +08:00
    找到了:
    # auto convert @username to clickable links
    def mentions(value):
    ms = re.findall('(@[a-zA-Z0-9\_]+\.?)\s?', value)
    if (len(ms) > 0):
    for m in ms:
    m_id = re.findall('@([a-zA-Z0-9\_]+\.?)', m)
    if (len(m_id) > 0):
    if (m_id[0].endswith('.') != True):
    value = value.replace('@' + m_id[0], '@<a href="/member/' + m_id[0] + '">' + m_id[0] + '</a>')
    return value
    else:
    return value
    register.filter(mentions)

    ——————————————
    现在是匹配的英文和数字吧?想让它同时匹配中文、英文、数字的话,该怎么改呢?
    eth2net
        6
    eth2net  
       2010-09-16 00:47:35 +08:00
    @paloalto 有点麻烦吧,毕竟要知道中文和id的对应关系啊,而且现在PB也没支持中文ID。
    paloalto
        7
    paloalto  
    OP
       2010-09-16 01:30:31 +08:00
    @eth2net 我自己乱搞了一个中文的nickname,用个人签名改的
    paloalto
        8
    paloalto  
    OP
       2010-09-16 01:31:33 +08:00
    我觉得把这个正则匹配去掉就可以实现了。明天再研究吧。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5549 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 41ms · UTC 08:27 · PVG 16:27 · LAX 00:27 · JFK 03:27
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.