Django + jQuery: иногда AJAX, но всегда СУХОЙ? - PullRequest
1 голос
/ 31 декабря 2010

Допустим, у меня есть приложение (в Django), для которого я хочу иногда (но не всегда) загружать контент через ajax.

Простой пример - вход в систему. Когда пользователь входит в систему, я не хочу обновлять страницу, просто измените ситуацию.

Тем не менее, если они уже вошли в систему, а затем пришли (или обновили) одну и ту же страницу, я хочу, чтобы она показывала тот же контент.

Итак, в первом случае, очевидно, я делаю своего рода вход в AJAX и загружаю изменения на страницу соответственно. Достаточно просто.

А как насчет второго случая? Должен ли я вернуться и добавить {% if user.authenticated%} везде? Это кажется холодным, темным и влажным.

С другой стороны, я могу просто обернуть все вещи ajaxy в функцию javascript, называемую loggedIn (), и запустить ее, если пользователь аутентифицирован. Но потом я столкнулся с двумя http-запросами вместо одного. Также нежелательно.

Так какое стандартное решение здесь?

Ответы [ 3 ]

1 голос
/ 31 декабря 2010

Этот подход отличается от моего другого ответа. Если вам не нравятся условия if в шаблонах, я бы рекомендовал использовать наследование шаблонов. Вы можете использовать, например, двух шаблонный подход, и вы визуализируете тот или иной вид, основываясь на user.is_authenticated:

Иметь базовый шаблон со страницей для неаутентифицированного пользователя (например, main_unauthenticated.html). Поместите все переменные части в блоки:

{% block userinfo %}You are not logged in yet{% endblock %}

Создайте шаблон main_authenticated.html, который наследуется от этого:

{% extends "main_unauthenticated.html" %}

И укажите переменные блоки:

{% block userinfo %}Welcome {{ request.user }}{% endblock %}

В общем случае наследование шаблонов является более мощным, чем включение.

1 голос
/ 31 декабря 2010

Я бы пошел с вашим вторым вариантом. Да, эти два HTTP-запроса сопряжены с некоторыми затратами, но поскольку оба будут получать части вашей страницы, вы не будете загружать одни и те же данные дважды. Это не будет сильно отличаться от наличия файла изображения или библиотеки JavaScript, на которые есть ссылки на странице (они также загружаются как отдельные запросы).

Если у вас нет разных наборов информации для вошедших в систему и анонимных пользователей, и вы не хотите загружать анонную информацию, а затем заменять ее вошедшей в систему. В этом случае загружайте общие элементы в загрузку главной страницы и всегда загружайте переменные части через Ajax (разные данные в зависимости от анонимного или зарегистрированного пользователя).

0 голосов
/ 31 декабря 2010

Если бы они существенно не отличались, я бы использовал вариант 1, если бы существовали существенные различия, я думаю, мне было бы легче поддерживать два шаблона для двух разных условий.Вы всегда можете использовать include, если бы большие куски были одинаковыми.

...