Нужна помощь в получении аутентификации для работы во всех приложениях в проекте Django - PullRequest
0 голосов
/ 23 июня 2011

Я начинаю с Django, и я только начинающий, когда дело доходит до серверного кода. Весь мой опыт веб-кодирования находится во внешнем интерфейсе и ограничен CSS, HTML и базовым JavaScript. Но я подумал, что пришло время заняться этим и узнать больше о бэк-энде вещей, и решил начать здесь. Я успешно прошел руководство по запуску приложения Django. Я не пытаюсь добавить расширение в приложение и "добавить его".

Я установил allauth для регистрации / управления пользователями. Я смог его настроить и успешно зарегистрироваться, войти, выйти с шаблонами по умолчанию.

Однако, когда я загружаю приложение опросов, которое находится в том же проекте, оно, похоже, не работает ...

Код в index.html (находится в шаблонах / опросах /) в приложении опросов, который не работает.

{% if user.is_authenticated %}
    <b>ALL GOOD</b>
{% else %}
    <b>Go sign-in first.</b>
{% endif %}

Код в sign-up.html (находится в шаблонах / account /) под учетными записями, которые действительно работают.

{% if user.is_authenticated %}
    Good work
{% else %}
    Fail
{% endif %}

Я где-то пропустил оператор импорта? Почему он работает в одной папке с шаблонами, а не в другой?

Заранее спасибо!

Ответы [ 3 ]

1 голос
/ 23 июня 2011

вместо request.user.is_authenticated.

1 голос
/ 23 июня 2011

Если вы используете RequestContext(request) и у вас есть django.contrib.auth.context_processors.auth в вашем TEMPLATE_CONTEXT_PROCESSORS, переменная user будет доступна в вашем шаблоне.

https://docs.djangoproject.com/en/dev/ref/templates/api/#django-contrib-auth-context-processors-auth

Я думаю, чтов моей голове было больше смысла.

RequestContext от from django.template import RequestContext, а когда вы

render_to_response("mytemplate.html",
    RequestContext(request, {"other_variable": other_value, "more": True}))

или

template.render(RequestContext(request, {"other_variable": other_value, "more": True}))

Простоположить: вы получаете доступ к группе переменных без указания их.


Редактировать: -

Я только что обнаружил, что вы можете использовать from django.views.generic.simple import direct_to_template вместо render_to_response

direct_to_template(request, "mytemplate.html", {"other_variable": other_value, "more": True})

То же самое, что и строка render_to_response, которую я дал выше.

0 голосов
/ 23 июня 2011

Без дополнительной информации сложно сказать, но моя первоначальная реакция заключается в том, что вы, возможно, не передаете пользовательскую переменную в контекст шаблона в своей функции представления.

т.е:.

def view(request):
    t = loader.get_template('index.html')
    c = Context({"user": request.user})
    return HttpResponse(t.render(c))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...