2015-05-10 2 views
-1

Я успешно создал пользовательскую систему регистрации пользователей как один модуль, и у меня есть еще один модуль с именем. Я хочу показать пользователя, зарегистрированного в моем пользовательском модуле регистрации пользователей, в шаблонах модуля статьи. Я использую {{if user.is_authenticated}} отображение {{user}}, чтобы отобразить имя пользователя в моих шаблонах.Доступ к сеансу Переменная

Я могу получить к нему доступ в пользовательских шаблонах регистрации пользователей, но не в шаблонах статей. Я хочу показать имя пользователя на навигационной панели, что и для обоих приложений.

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

Я использую django 1.8, и я также попытался создать переменную сеанса в файле views.py, но он также работает в том же приложении.

views.py проекта

from django.shortcuts import render, render_to_response, RequestContext 
from django.http import HttpResponseRedirect 
from django.contrib import auth 
from django.core.context_processors import csrf 
from custom_user.forms import CustomUserCreationForm 
from django.utils import timezone 

def login(request): 
    c = {} 
    c.update(csrf(request)) 
    return render_to_response('login.html', c) 

def auth_view(request): 
    username = request.POST.get('username', '') 
    password = request.POST.get('password', '') 
    user = auth.authenticate(username=username, password=password) 

    if user is not None: 
     auth.login(request, user) 
     request.session['user_id'] = user.id 
     request.session['user_email'] = user.email 
     return render(request, "loggedin.html", {},context_instance=RequestContext(request)) 
    else: 
     return HttpResponseRedirect('/accounts/invalid') 

def loggedin(request): 
    return render_to_response('loggedin.html', {}) 

def invalid_login(request): 
    return render_to_response('invalid_login.html') 

шаблон base.py

<ul class="nav navbar-nav navbar-right"> 
       <li><a href="/subscribe/">Subscribe</a></li> 
       {% if user.is_authenticated %} 
       <li><a href="/">{{user}}</a></li> 
       <li><a href="/accounts/logout/">Logout</a></li> 
       {% else %} 
       <li><a href="/accounts/login/">Login</a></li> 
       {% endif %} 
      </ul> 

views.py из статьи приложения

from django.shortcuts import render 
from django.http import HttpResponse 
from django.template import RequestContext 
from django.template.loader import get_template 
from django.shortcuts import render_to_response 
from django.conf import settings 
from article.models import Article, Comment, Subscribers 
from forms import ArticleForm, CommentForm, SubscriptionForm, ActivateSubscriberForm 
from django.http import HttpResponseRedirect 
from django.core.context_processors import csrf 
from django.utils import timezone 
from django.core.mail import send_mail 
from random import randrange 
from signup.views import * 
# from .forms import RegistrationForm 

# Create your views here. 

def articles(request): 
    return render_to_response('articles.html', 
     {'articles':Article.objects.all().order_by('-id'),'last':Article.objects.earliest('-pub_date')}) 

def article(request, article_id=1): 
    return render_to_response('article.html', 
     {'article':Article.objects.get(id=article_id)}) 

Когда пользователь авторизирован, то loggedin.html является рендеринга и там я создал ссылку, чтобы перейти в приложение статей, в котором используется тот же шаблон base.py.

ответ

0

Вы можете получить доступ к данным аутентификации, если у вас есть процессор 'django.contrib.auth.context_processors.auth' в TEMPLATE_CONTEXT_PROCESSORS.

Однако, он присутствует по умолчанию - возможно, вы его удалили?

Наконец, документация очень полезно по этой теме: https://docs.djangoproject.com/en/1.8/topics/auth/default/#authentication-data-in-templates

+0

Я поделился кодом – S7H

+0

Как сказал @Daniel Roseman, вам не хватает контекста - либо перейдите в «render», либо добавьте контекст. И отметьте его ответ как правильный ;-) – Marcanpilami

0

Вы фактически не показали какого-либо кода, но проблема почти наверняка, как вы рендеринга шаблона. Как указывает Марканпилами, переменная user автоматически добавляется процессорами контекста шаблона; но контекстные процессоры выполняются только в том случае, если вы используете RequestContext для визуализации вашего шаблона. В наши дни это означает, что вы используете ярлык render, а не render_to_response.

(Для полноты, вы можете использовать render_to_response до тех пор, как вы передаете его context_instance=RequestContext, но это почти всегда легче просто использовать render).

+0

код общий. Пожалуйста, проверьте – S7H

+0

Ну, как я уже сказал, вы используете 'render_to_response' вместо' render'. –