all-auth에서 확장 된 사용자 모델을 사용하고 있습니다. 나는 확장 모델 필드 (조직과 같은)와 표준 사용자 필드 (예 : user.email)를 하나만 제외하고 모든 템플릿에서 쉽게 가져올 수 있습니다.일부 템플릿에 사용자 필드가 나타나지 않습니다.
나는 (내가 장고를 처음 접했을 때) 업데이트 폼을 만들기 위해 고심했기 때문에 나는 properties/instances를 사용했다. 이것은 효과가 있었다. 나는 orgnization을 편집 할 수 있습니다. 하지만이 템플릿에서 어떤 이유로 user.email을 호출 할 수 없습니다. RequestContext에서 다른 방식으로 전달할 때 실패한 시도까지 모든 변형을 시도했습니다.
모델 :
from django.db import models
from django.contrib.auth.models import User
class Profile(models.Model):
user = models.OneToOneField(User, related_name='profile', on_delete=models.CASCADE)
organization = models.CharField(max_length=100)
def __str__(self):
return self.user.organization
# I got this from an old tutorial:
User.profile_p = property(lambda u: Profile.objects.get_or_create(user=u)[0])
보기 :
from django.shortcuts import render, render_to_response
from django.http import HttpResponseRedirect
from django.template.context_processors import csrf
from .forms import UserProfileForm
from django.contrib.auth.decorators import login_required
from django.contrib.auth.models import User
from .models import Profile
@login_required
def user_profile(request):
if request.method == 'POST':
form = UserProfileForm(request.POST, instance=request.user.profile_p)
if form.is_valid():
form.save()
return HttpResponseRedirect('/base_home.html')
else:
logged_user = request.user
profile = logged_user.profile_p
form = UserProfileForm(instance=logged_user.profile_p)
args = {}
args.update(csrf(request))
args['form'] = form
return render_to_response('profile.html', args)
템플릿 : 어떤 이유
{% extends 'base.html' %}
<title>{% block title %}Admul:{% endblock %}</title>
{% block content %}
<div id="cd_content">
<div class="container-fluid">
<div class="row-fluid">
<h3>Account Details for: {{ user.email }}</h3>
<div class="widget-box">
<div class="widget-content nopadding">
{% for field in form %}
{{field.error}}
{% endfor %}
<form method="post" action="/cust_profile/profile/">
{% csrf_token %}
{{ form.as_p }}
<button type="submit">Edit »</button>
</form>
</div>
</div>
</div>
</div>
</div>
{% endblock %}
, user.email 또는 많은 변화 그 (같은 {{request.user. 이메일}})이이 템플릿에서 작동하지 않습니다. 그러나 다른 모든 템플릿에서는 완벽하게 작동합니다. RequestContext 정보를 취소하는 내 견해와 관련이 있습니까?
또한 고칠 수있는 바보 같은 오류가 발생하면 미리 감사드립니다.
{{request.user.email}} –
감사합니다. Vivek,하지만 그 해결책은 작동하지 않았습니다. 문제는 Daniel Roseman이 말한 것입니다. render_to_response는 컨텍스트 프로세서를 전달하지 않습니다. 나는 렌더링으로 전환했다. –