Форум сайта python.su
Добрый день, несколько глупый вопрос назрел…
Если взять как пример сайты - VK, YouTube, то там когда ты переходишь по ссылкам (новости, подписки т п.), то вся страница целиком не перезагружается, т.е каждый раз при переходе по ссылке ajax-щи загружается нужный контент и заменяется в элементе на странице.
Кто делал подобное с джангой? Понятное дело, что тут больше вопрос к клиентской части, но например как быть с url'ами?
Чтобы не писать вывод одной страницы дважды, создаем один url на одну страницу и уже в функции представления смотреть был этот запрос аяком или нет? Потому что если запрос был без аякса, то нам нужно чтобы вместе с контентом этой странице еще и передавались шапка страницы, подвал (то что подключаем тегом extern в шаблоне), а если запрос был по аяксу, то эти блоки передавать не надо.
Кто сталкивался с таким вопросом, какие решения можете посоветовать?
Офлайн
hound
Кто сталкивался с таким вопросом, какие решения можете посоветовать?
def some_view(request): if 'some_key' in request.POST.keys(): # Отдаем данные в JSON для AJAX-запроса. return JsonResponse({'result': 'ok', 'la-la-la': 'topolya'}) else: # Отдаем страницу целиком. context = {'la-la-la': 'topolya''} return render(request, 'base.html', context)
Офлайн
Хм…может не правильно выразил свою мысль или не до конца понял Ваш ответ…
но зачем при аякс запросе отдавать json? Если нужно, например, вывести не просто пару изменяемых значений, а какую-то страницу?
По аналогии, если брать тот же самый YouTube, то там при переходе из “рекомендуемые” в “мои подписки” подгруживается же отрендеренный HTML шаблон?
Офлайн
На Youtube, afaik, используется angular и html5-mode (тыц).
Если вы откроете youtube в IE версии 9 - то при переходе у вас станица будет полностью перезагружаться, т.к. html5 history api не работает: http://caniuse.com/#search=history
Офлайн
hound
но зачем при аякс запросе отдавать json?
hound
Если нужно, например, вывести не просто пару изменяемых значений, а какую-то страницу?
Отредактировано Alen (Янв. 10, 2015 07:52:10)
Офлайн
Ладно, например, у нас есть сайт, который имеет несколько страниц и у всех страниц есть общая шапка, подвал и меню, т.е у нас есть главный шаблон (с меню, подвалом и шапкой) и по каждому шаблону для каждой странице.
main.html
<html> <header> <menu> <div id="content"> {% block content %} {% endblock %} </div> <footer> </html>
{% extends 'main.html' %} {% block content %} <h1>App1</h1> {% endblock %}
$("a").on("click", function() { var url = $(this).attr('href'); $.ajax({ url: url, success: function(data) { $("div#content").html(data); } }); });
Отредактировано hound (Янв. 10, 2015 12:38:53)
Офлайн
hound
Проще же тогда при аяксе тоже выдавать шаблон (зачем городить повторные куски кода), но как запрещать выдачу extends?
Офлайн
Так если код функции представления будет таким:
def show_page(request): return render(request, 'apps/app1.html')
Офлайн
hound
Так если код функции представления будет таким
$("div#content").html(data['content']);
Отредактировано Alen (Янв. 10, 2015 16:30:03)
Офлайн
Alen
Так тогда придется еще делать шаблоны…а если страниц много, то будет получатся, что шаблонов будет в 2 раза больше:
один шаблон для аякса (вырезанный), а второй для “обычного” перехода и если верстка меняться будет, то в 2 раза больше работы будет…
Отредактировано hound (Янв. 10, 2015 16:49:29)
Офлайн