Как преобразовать подобный тегу и имени пользователя текст в правильные ссылки в сообщении в твиттере? - PullRequest
0 голосов
/ 03 апреля 2010

Я пишу твиттероподобное веб-приложение для создания заметок.

На странице будут перечислены последние 20 заметок пользователя, и когда пользователь прокрутит до конца окна браузера, будет загружено и отображено больше элементов.

Первые 20 заметок являются частью сгенерированного html моего шаблона django, но другие динамически загружаемые элементы имеют формат json.

Я хочу знать, как мне последовательно выполнять преобразование имени пользователя и тега.

Заранее спасибо.

Ответы [ 3 ]

2 голосов
/ 03 апреля 2010

Здесь нужно рассмотреть пару вещей. На стороне сервера вы должны быть в состоянии поддерживать, какой «блок» в списке заметок находится у пользователя. Самый простой способ сделать это, вероятно, 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 голос
/ 03 апреля 2010

Вопрос не так ясен ... но для генерации HTML из твита взгляните на twp (основанный на официальной lib twitter-text-java): http://github.com/BonsaiDen/twp

0 голосов
/ 03 апреля 2010

Я не совсем уверен, что вы спрашиваете, но что не так с чем-то вроде {{ user.get_absolute_url }}? Для URL-адресов подробной информации о тегах это действительно зависит от того, что вы ищете, но вам придется создать URL-адрес и просмотреть его самостоятельно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...