2015-07-16 5 views
1

Я перехожу к accounts/login, и мне предлагается страница входа. Когда я ввожу имя пользователя и пароль, он принимает меня в profile.html. Оттуда я просто вижу профиль слова, но я хочу, чтобы он также показывал {{user.username}}. У DOM только <p></p> пусто.Функция Django Render: шаблон не печатает переменную

Я включил отладку PDB, но никаких следов или чего-либо не происходит.

LoginView.py

def login_view(request): 
    username = request.POST.get('username', '') 
    password = request.POST.get('password', '') 
    user = auth.authenticate(username=username, password=password) 
    if user is not None: 
     if user.is_active: 
      login(request, user) 
      print(user) 
      print(user.username) 
      return render(request, '/', { 
       'username': username, 
       'user': user 
      }) 
      # return HttpResponseRedirect('/') 
    else: 
     return 'Please enter your UN and PW' 

profile.html

{% block content %} 
<html> 
<head> 
    <title>PROFILE</title> 
</head> 
<body> 
    PROFILE 
</body> 
<p> 
    {{ user.username }} 
</p> 
</html> 
{% endblock %} 

Если кто-то может дать мне советы отладки, вручную ссылки или объяснение того, почему user.username не появляется, я буду признательна. Приветствия

UPDATE ВАЖНАЯ ИНФОРМАЦИЯ:

Так что я думаю, что проблема заключается с пользовательской переменной, а не какой-то нелепая ошибка с моей стороны относительно метода. Если я использую

return render(request, '/', { 
    'Kitty': 5,  
}) 

, а затем на пользователя формы I {{ Kitty }} достаточно уверен, что он делает печать 5. Но вы, вероятно, знал, что уже.

UPDATE 2 Внутри моей settings.py

MIDDLEWARE_CLASSES = (
    'django.contrib.sessions.middleware.SessionMiddleware', 
    'django.middleware.common.CommonMiddleware', 
    'django.middleware.csrf.CsrfViewMiddleware', 
    'django.contrib.auth.middleware.AuthenticationMiddleware', 
    'django.contrib.auth.middleware.SessionAuthenticationMiddleware', 
    'django.contrib.messages.middleware.MessageMiddleware', 
    'django.middleware.clickjacking.XFrameOptionsMiddleware', 
    'django.middleware.security.SecurityMiddleware', 
) 

и

TEMPLATES = [ 
    { 
     'BACKEND': 'django.template.backends.django.DjangoTemplates', 
     'DIRS': [os.path.join(BASE_DIR, 'templates')], 
     'APP_DIRS': True, 
     'OPTIONS': { 
      'context_processors': [ 
       'django.template.context_processors.debug', 
       'django.template.context_processors.request', 
       'django.contrib.auth.context_processors.auth', 
       'django.contrib.messages.context_processors.messages', 
      ], 
     }, 
    }, 
] 

UPDATE 3

def login_view(request): 
    myUserName = request.POST.get('username', '') 
    password = request.POST.get('password', '') 
    user = auth.authenticate(username=myUserName, password=password) 
    if user is not None: 
     if user.is_active: 
      login(request, user) 
      print(user) 
      print(user.username) 
      return render(request, '/', { 
       'Kitty': 5, 
       'myUserName': myUserName,  
      }) 
      # return HttpResponseRedirect('/') 
    else: 
     return 'Please enter your UN and PW' 

<p> 
    {{ user.get_username }} 
</p> 
<p> 
    {{ Kitty }} 
</p> 
<p> 
    {{ myUserName }} 
</p> 

^^^ Предложение о переименовании UserName

UPDATE 5 Это, пожалуй, лучшее, что я могу справиться с отладкой

DEBUG (0.002) QUERY = 'SELECT "auth_user"."id", "auth_user"."password", "auth_user"."last_login", "auth_user"."is_superu 
ser", "auth_user"."username", "auth_user"."first_name", "auth_user"."last_name", "auth_user"."email", "auth_user"."is_st 
aff", "auth_user"."is_active", "auth_user"."date_joined" FROM "auth_user" WHERE "auth_user"."username" = %s' - PARAMS = 
('heebeans',); args=('heebeans',) 

Кстати, heebeans пользователь с «heebeans» ООН и PW «heebeans»

Спасибо за все ваши поддержка до сих пор!

+0

Это может быть проблемой имен переменных. В django 'user' является объектом. Я подозреваю, что, поскольку вы пытаетесь отобразить 'user' и' username', он может пытаться получить доступ к 'username' (вашей переменной)' user' (объект django). Так как этого не существует, он пропускает молчащую ошибку. Попробуйте переименовать 'username', возможно,' user_name' и поместите эту переменную в шаблон и сообщите мне, что произойдет. –

+0

Каково значение 'myUserName', если вы печатаете его в своем представлении? –

+0

Мне очень жаль, что я некомпетентен, но как мне его распечатать с моего взгляда? Есть ли простой способ показать его в командной оболочке? Все еще не уверены, как правильно отлаживать материал. –

ответ

0

Когда вы передали имя пользователя и пользователя, вы передали dict.

{'username': username, 'user':user}

Для доступа к ним в HTML, просто используйте {{username}} или {{user}}

+0

Ничего из того не получилось. Спасибо –

1

Вам не нужно передать объект имя пользователя в качестве контекста к вашему мнению. По умолчанию Django includes that for its template context processors. Пользовательский объект хранится в переменной «пользователь». Вы можете использовать метод get_username() объекта User. Пример кода ниже:

LoginView.ру

def login_view(request): 
    username = request.POST.get('username', '') 
    password = request.POST.get('password', '') 
    user = auth.authenticate(username=username, password=password) 
    if user is not None: 
     if user.is_active: 
      login(request, user) 
      print(user) 
      print(user.username) 
      return render(request, '/') 
      # return HttpResponseRedirect('/') 
    else: 
     return 'Please enter your UN and PW' 

profile.html

{% block content %} 
<html> 
    <head> 
     <title>PROFILE</title> 
    </head> 
<body> 
    PROFILE 
</body> 
<p> 
    {{ user.get_username }} 
</p> 
</html> 
{% endblock %} 

Убедитесь, что у вас есть что-то подобное в вашем settings.py. В частности, включите django.contrib.auth.context_processors.auth в ваших шаблонных контекстных процессорах.

TEMPLATES = [ 
    { 
     'BACKEND': 'django.template.backends.django.DjangoTemplates', 
     'DIRS': [os.path.join(BASE_DIR, 'templates')], 
     'APP_DIRS': True, 
     'OPTIONS': { 
      'context_processors': [ 
       'django.template.context_processors.debug', 
       'django.template.context_processors.request', 
       'django.contrib.auth.context_processors.auth', 
       'django.contrib.messages.context_processors.messages', 
      ], 
     }, 
    }, 
] 
+0

Это тоже ничего не изменило. Я считаю, что это должно работать из документов, но по какой-то причине это действует странно. В какой-то момент я постараюсь добавить подробные сведения к сообщению –

+0

Добавлен новый блок кода. Убедитесь, что у вас есть это в ваших настройках. –

+0

Да, он был там автоматически. Я добавлю свои классы промежуточного слоя, а также шаблоны. Спасибо –

1

Если проверка подлинности пользователя можно получить доступ к имени пользователя, как

{{ request.user.username }} 

Но settings должен содержать

TEMPLATE_CONTEXT_PROCESSORS = (
    # ... 
    'django.core.context_processors.request', #'django.template.context_processors.request', in django1.8 
    # ... 
) 
+0

Ничего не изменилось, оно все еще пустое, я считаю, что пользователь вошел в систему? –

+0

попробуйте с 'request.user.email'? – itzMEonTV

Смежные вопросы