Я успешно создал пользовательскую систему регистрации пользователей как один модуль, и у меня есть еще один модуль с именем. Я хочу показать пользователя, зарегистрированного в моем пользовательском модуле регистрации пользователей, в шаблонах модуля статьи. Я использую {{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.
Я поделился кодом – S7H
Как сказал @Daniel Roseman, вам не хватает контекста - либо перейдите в «render», либо добавьте контекст. И отметьте его ответ как правильный ;-) – Marcanpilami