如何将类似tag-and-username的文本转换为twitter消息中的正确链接?

时间:2010-04-03 04:03:40

标签: python django twitter

我正在写一个类似Twitter的笔记记录网络应用程序。

在一个页面中,将列出该用户的最新20个音符, 当用户滚动到浏览器窗口底部时,将加载和渲染更多项目。

最初的20个音符是我的django模板生成的html的一部分,但其他动态加载的项目是json格式。

我想知道如何一致地进行标记和用户名转换。

提前致谢。

3 个答案:

答案 0 :(得分:2)

这里要考虑几件事。在服务器端,您必须能够维护用户所在的备注列表的“块”。最简单的方法可能是Django paginator。它的工作原理基本上是通过QuerySet,设置项目数量的计数,然后给它“页面”数字(或“块”数字),它返回这些项目。

你可以用JSON做到这一点,但用HTML也很容易。当我们查看客户端部分时,您会明白原因。

所以我们可以有一个视图“api”来处理一个音符“chunk”(注意我这里的所有代码示例都只是为了演示而缩写。你想要有错误处理和所有这些) ...

def get_notes_chunk(request, *args, **kwargs):
    # Get our notes, however...
    all_notes = Notes.objects.all()

    # Paginate them based on the page we're on...
    chunk_number = request.GET.get('c')    
    paginator = Paginator(all_notes, 20)  # (show 20 at a time)
    current_chunk = paginator.page(chunk_number)

    # Render to template all that jazz
    render_to_template( ... , { 'paginator':paginator, 'current_chunk':current_chunk }, ...)

我们的模板会呈现<li>个标签,我们会将这些标签粘贴到客户端的<ul>上...

{% for note in current_chunk.object_list %}
    <li>{{ note }}</li>
{% endfor %}

现在在客户端上,我们需要编写一些javascript来处理这个问题。由你来决定触发更新的事件,但至于如何,我们可以使用一个小jQuery来处理这个......

<script type="text/javascript">    
    var chunk_count = 1;
    var notes_list_id = 'notes-list'

    function load_next_chunk() {
        chunk_count += 1;
        $.get('{% url get_notes_chunk %}?c=' + chunk_count, function(html) {
            $('#'+notes_list_id).append(html);
        });        
    }
</script>

<body>

    ...

    <ul id="notes-list">
        <!-- Render chunk #1 here -->
    </ul>

    ...

</body>

一些可能有意义的事情......

  • 将备注列表的呈现重构为模板标记,以便您可以将其重复用于API以及页面的主要呈现
  • 重构Notes(或其他)模型的查询/分页,以便您可以在两个视图中重复使用它
  • 弄清楚下一个块将被加载的事件并实现它。

答案 1 :(得分:1)

问题不是那么清楚......但是为了从Tweet中生成HTML,请看一下twp(基于官方的twitter-text-java lib):
http://github.com/BonsaiDen/twp

答案 2 :(得分:0)

我不确定你问的是什么,但{{ user.get_absolute_url }}之类的东西有什么问题?对于标记详细信息URL,它实际上取决于您要查找的内容,但您必须自己构建URL并查看。