Django не оценивает базовый шаблон в представлениях

#django #django-templates #django-registration

#django #django-шаблоны #django-регистрация

Вопрос:

Я совсем новичок в Django, и я только что настроил свою первую страницу регистрации с помощью django-registration, и все работало хорошо (пользователи могут регистрироваться, менять пароли и т.д.). Теперь я хочу немного расширить свое приложение, поэтому я хотел добавить простую страницу профиля, чтобы при входе пользователя в систему он /она может видеть их профиль. Итак, я создал profile_page.html шаблон для расширения базового шаблона и в моих представлениях настроить очень простое представление:

 @login_required
def profile_info_view(request, template_name='profile/profile_page.html'):
    user_profile = request.user.username
    return render_to_response(template_name,{ "user":user_profile })
  

Мой базовый шаблон выглядит так:

 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">

<head>
    <link rel="stylesheet" href="{{ STATIC_URL }}css/style.css" />
    <link rel="stylesheet" href="{{ STATIC_URL }}css/reset.css" />
    {% block extra_head_base %}
    {% endblock %}
    <title>{% block title %}User test{% endblock %}</title>
</head>

<body>
    <div id="header">
        {% block header %}
    {% if user.is_authenticated %}
    {{ user.username }} |
    <a href="{% url auth_password_change %}">{% trans "Profile" %}</a> | 
    <a href="{% url index %}">{% trans "Home" %}</a> | 
    <a href="{% url auth_logout %}">{% trans "Log out" %}</a>
    {% else %}
    <a href="{% url auth_login %}">{% trans "Log in" %}</a> | <a href="{% url registration_register %}">{% trans "Sign up" %}</a>
    {% endif %}
        {% endblock %}
    </div>

    <div id="content">
        {% block content %}{% endblock %}
    </div>

</body>

</html>
  

и profile_pages.html шаблон — это:

 {% extends "base.html" %}
{% load i18n %}

{% block content %}
Hi, {{ user }}
{% endblock %}
  

и url.py:

 urlpatterns = patterns('',
    (r'^accounts/', include('registration.urls')),
    (r'^profile/', profile_info_view),                     
    (r'^$', direct_to_template,{ 'template': 'index.html' }, 'index'),
)

urlpatterns  = staticfiles_urlpatterns()
  

Поэтому я хочу, чтобы это было так, когда вошедший в систему пользователь переходит на страницу профиля (example.com/profile /) он показывает страницу профиля и страницу входа в систему, если пользователь не вошел в систему.

Но когда вошедший в систему пользователь переходит в /profile, он оценивает базовый шаблон, как если бы пользователь не регистрировался (показывает вход в систему в заголовке), но он показывает результат профиля. Кроме того, статические файлы также не работают?

Любые подсказки, почему это может происходить?

ps. Я включил каталоги шаблонов в settings.py

Спасибо за любую помощь!

Комментарии:

1. похоже, вы вызываете is_authenticated для строки? (the username ), возможно, вам придется передать объект user.

2. не могли бы вы опубликовать profile_page.html шаблон тоже (или часть его)?

3. Я не думаю, что это проблема… хорошо работает для шаблонов регистрации

4. {% расширяет «base.html » %} {% загрузка i18n %} {% содержимое блока %} Привет, {{user }} {% endblock %}

Ответ №1:

Как говорится в комментариях dm03514, вы передаете имя пользователя — строку — шаблону в качестве user переменной, а не фактическому объекту пользователя. Строка имени пользователя не имеет метода is_authenticated , поэтому ваша проверка возвращает False .

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

 return render_to_response(template_name, {}, context_instance=RequestContext(request))