Рендеринг объектов JSON с помощью шаблона Django после вызова Ajax

Я склонен придерживаться первого соглашения, простого подчеркивания. Я также не указываю тип в имени, потому что мне Intellisense говорит, что это такое (я знаю, это может быть опора).

Лучше всего посоветоваться с коллегами или коллегами по проекту и просто принять решение о соглашении, некоторые из них являются произвольными.

65
задан Peter Mortensen 11 December 2009 в 12:52
поделиться

6 ответов

Привет, спасибо, vikingosegundo!

Я тоже люблю использовать декораторы :-). Но пока что я следую подходу, предложенному в упомянутом выше фрагменте. Единственное, используйте вместо фрагмент n. 942 , потому что это улучшенная версия оригинальной. Вот как это работает:

Представьте, что у вас есть шаблон (например, 'subtemplate.html') любого размера, который содержит полезный блок, который вы можете использовать повторно:

     ........
    <div id="results">          
        {% block results %}
            {% for el in items %}
                   <li>{{el|capfirst}}</li>
            {% endfor %}
        {% endblock %}      
    </div><br />
     ........

Импортируя в свой файл представления приведенный выше фрагмент, вы можете легко ссылаться в любой блок в ваших шаблонах. Замечательная особенность заключается в том, что отношения наследования между шаблонами принимаются во внимание, поэтому, если вы ссылаетесь на блок, который включает в себя другой блок, и так далее, все должно работать нормально. Итак, представление ajax выглядит так:

from django.template import loader
# downloaded from djangosnippets.com[942]
from my_project.snippets.template import render_block_to_string

def ajax_view(request):
    # some random context
    context = Context({'items': range(100)})
    # passing the template_name + block_name + context
    return_str = render_block_to_string('standard/subtemplate.html', 'results', context)
    return HttpResponse(return_str)
25
ответ дан 24 November 2019 в 15:32
поделиться

Вот как я использую один и тот же шаблон для традиционного рендеринга и рендеринга Ajax-ответа.

Шаблон:

<div  id="sortable">

{% include "admin/app/model/subtemplate.html" %}
</div>

Включенный шаблон (он же: подшаблон):

<div id="results_listing">
{% if results %}
    {% for c in results %}
        .....
    {% endfor %}
{% else %}

Ajax-view :

@login_required
@render_to('admin/app/model/subtemplate.html')#annoying-decorator
def ajax_view(request):
    .....

    return { 
        "results":Model.objects.all(),
    }      

Конечно, вы можете использовать render_to_response. Но мне нравятся эти надоедливые декораторы: D

13
ответ дан 24 November 2019 в 15:32
поделиться

Нет причин, по которым вы не можете вернуть отрисованный бит HTML с помощью Ajax и вставить его на существующую страницу в нужном месте. Очевидно, вы можете использовать шаблоны Django для рендеринга этого HTML, если хотите.

7
ответ дан 24 November 2019 в 15:32
поделиться

Я не думаю, что когда вы работаете с Ajax, шаблоны можно использовать. Шаблон существует для того, чтобы вы могли легко генерировать динамический HTML на стороне сервера и, следовательно, он предоставляет несколько программных ловушек внутри HTML.

В случае Ajax вы передаете данные JSON и можете отформатировать их как хотите в Python. а элементы HTML / документа будут сгенерированы на стороне клиента с использованием JSON какой-либо библиотекой JavaScript, например jQuery на стороне клиента.

Возможно, если у вас есть очень конкретный случай замены некоторого внутреннего HTML из HTML на стороне сервера, возможно, вы можете использовать шаблоны но в таком случае зачем вам нужен JSON? Вы можете просто запросить HTML-страницу через Ajax и изменить внутренний или внешний или любой другой HTML.

6
ответ дан 24 November 2019 в 15:32
поделиться

Шаблоны предназначены для презентации . Ответ с данными в формате X (JSON, JSONP , XML, YAML , * ml и т. Д.) Не является представлением, поэтому вам не нужны шаблоны. Просто сериализуйте свои данные в формат X и верните их в HttpResponse.

3
ответ дан 24 November 2019 в 15:32
поделиться

К сожалению, шаблоны Django предназначены для выполнения только на стороне сервера. Существует по крайней мере один проект для рендеринга шаблонов Django с использованием Javascript, но я не использовал его и поэтому не знаю, насколько он быстр, хорошо поддерживается или обновлен. Помимо этого, вы должны либо использовать шаблоны Django на сервере, либо генерировать динамические элементы на клиенте без использования шаблонов.

0
ответ дан 24 November 2019 в 15:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: