Форум сайта python.su
0
Добрый день, несколько глупый вопрос назрел…
Если взять как пример сайты - VK, YouTube, то там когда ты переходишь по ссылкам (новости, подписки т п.), то вся страница целиком не перезагружается, т.е каждый раз при переходе по ссылке ajax-щи загружается нужный контент и заменяется в элементе на странице.
Кто делал подобное с джангой? Понятное дело, что тут больше вопрос к клиентской части, но например как быть с url'ами?
Чтобы не писать вывод одной страницы дважды, создаем один url на одну страницу и уже в функции представления смотреть был этот запрос аяком или нет? Потому что если запрос был без аякса, то нам нужно чтобы вместе с контентом этой странице еще и передавались шапка страницы, подвал (то что подключаем тегом extern в шаблоне), а если запрос был по аяксу, то эти блоки передавать не надо.
Кто сталкивался с таким вопросом, какие решения можете посоветовать?
Офлайн
49
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)
Офлайн
0
Хм…может не правильно выразил свою мысль или не до конца понял Ваш ответ…
но зачем при аякс запросе отдавать json? Если нужно, например, вывести не просто пару изменяемых значений, а какую-то страницу?
По аналогии, если брать тот же самый YouTube, то там при переходе из “рекомендуемые” в “мои подписки” подгруживается же отрендеренный HTML шаблон?
Офлайн
34
На Youtube, afaik, используется angular и html5-mode (тыц).
Если вы откроете youtube в IE версии 9 - то при переходе у вас станица будет полностью перезагружаться, т.к. html5 history api не работает: http://caniuse.com/#search=history
Офлайн
49
hound
но зачем при аякс запросе отдавать json?
hound
Если нужно, например, вывести не просто пару изменяемых значений, а какую-то страницу?
Отредактировано Alen (Янв. 10, 2015 07:52:10)
Офлайн
0
Ладно, например, у нас есть сайт, который имеет несколько страниц и у всех страниц есть общая шапка, подвал и меню, т.е у нас есть главный шаблон (с меню, подвалом и шапкой) и по каждому шаблону для каждой странице.
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)
Офлайн
49
hound
Проще же тогда при аяксе тоже выдавать шаблон (зачем городить повторные куски кода), но как запрещать выдачу extends?
Офлайн
0
Так если код функции представления будет таким:
def show_page(request): return render(request, 'apps/app1.html')
Офлайн
49
hound
Так если код функции представления будет таким
$("div#content").html(data['content']); Отредактировано Alen (Янв. 10, 2015 16:30:03)
Офлайн
0
Alen
Так тогда придется еще делать шаблоны…а если страниц много, то будет получатся, что шаблонов будет в 2 раза больше:
один шаблон для аякса (вырезанный), а второй для “обычного” перехода и если верстка меняться будет, то в 2 раза больше работы будет…
Отредактировано hound (Янв. 10, 2015 16:49:29)
Офлайн