2015-01-19 2 views
0

У меня есть некоторые представления, которые загружаются через вызовы Ajax. Но при рендеринге начальной страницы, которая вызывает вызовы Ajax, я, возможно, захочу, чтобы одно из моих Ajax-представлений загрузилось сразу.Как вызвать Ajax-представление из шаблона?

То есть, в моем шаблоне у меня есть что-то вроде:

{% if something_happen %} 
<p>Some text.</p> 
{% else %} 
{# Render my ajax view here #} 
{% endif %} 

я мог либо заменить {# Render my ajax view here #} с некоторыми Javascript, что сделает фактический запрос Ajax, или я мог бы сделать некоторые трюк на Django стороны, вызывной и рендеринг вид сразу, сохраняя одно круговое движение по сети.

Мне не нравится первый вариант по соображениям производительности, а второй кажется беспорядочным.

Самый чистый способ, который я думал о реализации этого трюка на стороне сервера, заключался в том, чтобы иметь возможность вызвать и встроить представление Ajax изнутри шаблона. Второй лучший способ - вернуть HttpResponse, возвращенный из представления Ajax, и каким-то образом внедрить его содержимое в шаблон. Другие варианты включают повторение себя, и я не должен повторять себя.

Каков наилучший способ встраивания Ajax с самого начала? Существует ли тег шаблона, который вызывает встроенные представления? Если нет, как я могу написать его? Это хорошая идея? Как действовать?

+0

Просьба поделиться кодом для начальных и ajax-контроллеров. –

+0

Что вы имеете в виду? Для части ajax код тот же. – lvella

+0

Django имеет представления (функциональные и классные), на которые указывает URL-адрес. Если вы можете использовать код представления, который вы используете для исходного представления, а также код для представления ajax, я смогу обработать ответ. Ответ может отличаться в зависимости от того, что вы делаете в этих представлениях. –

ответ

0

Если у вас есть шаблон, реализующий представление, которое обычно может быть вызван из Ajax, вы можете загрузить на стороне сервера со следующим:

{% include 'my_template.html' %} 

То есть если предположить, что все переменные, которые вы бы нормально заполнить в представлении Ajax уже присутствуют в контексте, в который вы включаете шаблон. Если вам нужно добавить контекст, вы можете сделать:

{% with local_var as template_var %} 
    {% include 'my_template.html' %} 
{% endwith %} 
+0

Это не так, и в этом проблема. Для переменных я либо должен вызывать представление, либо дублировать код, либо реорганизовывать все, чтобы логика представления была разделена на функцию, и у меня был какой-то беспорядок. – lvella

+0

OK ... но если это слишком много усилий в этот момент, трудно понять, какая часть серверного решения будет чище. Я оставил бы его как вставку Ajax на стороне браузера, пока/если это не стоит усилий для рефакторинга. – dylrei

Смежные вопросы