Django: переменная запроса процессора контекста шаблона

81
8

Я пытаюсь реализовать django-facebookconnect, так как мне нужно проверить, зарегистрирован ли пользователь через Facebook или обычного пользователя.


В шаблоне я могу проверить, зарегистрирован ли пользователь через facebook, установив request.facebook.uid
например:


{% if is_facebook %}
{% show_facebook_photo user %}
{% endif %}

Для этого мне нужно передать is_facebook': request.facebook.uid в шаблон, и я буду использовать его во всех местах, поэтому я хочу попробовать применить его к существующему процессору контекстного шаблона и вызвать snipplet выше в файле base.html, и это отлично работает для объектов Foo:


def global_variables(request):
from django.conf import settings
from myproject.myapp.models import Foo
return {'is_facebook': request.facebook.uid,'foo_list': Foo.objects.all()}

Я могу перечислить объекты Foo в любом представлении без каких-либо проблем, однако он не работает для этого нового is_facebook, он просто ничего не возвращает.


Если я передаю 'is_facebook': request.facebook.uid в каждом отдельном представлении, он работает, но мне нужно это глобально для любого представления рендеринга.

спросил(а) 2010-02-16T01:52:00+03:00 10 лет, 8 месяцев назад
1
Решение
57

Если у вас есть доступ через объект request, почему вам нужно добавить специальное is_facebook логическое значение вообще? Просто включите встроенный django.core.context_processors.request, и это гарантирует, что request присутствует во всех шаблонах, тогда вы можете сделать это:

{% if request.facebook.uid %}

ответил(а) 2010-02-16T02:07:00+03:00 10 лет, 8 месяцев назад
41

Это может быть проблема времени. Убедитесь, что общее промежуточное программное обеспечение поставляется в промежуточном программном обеспечении facebook в вашем файле настроек. Вероятно, вы можете отлаживать и видеть, когда промежуточное ПО facebook изменяет запрос и когда вызывается ваш процессор контекста. Это может дать вам некоторое представление о том, почему это происходит. Но, как сказал Дэниел, вы всегда можете просто использовать объект запроса в своих шаблонах.

ответил(а) 2010-02-16T06:51:00+03:00 10 лет, 8 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема