all-authの拡張ユーザーモデルを使用しています。私は拡張モデルフィールド(組織のような)と標準のユーザーフィールド(user.emailのような)の両方を、1つを除くすべてのテンプレートで簡単に取り出すことができます。一部のテンプレートにユーザーフィールドが表示されない
私は更新フォームを作成するのに苦労したので(私はDjangoをまだ新しくしています)、プロパティ/インスタンスを使用してしまいました。これはうまくいった。私は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はコンテキストプロセッサを渡しません。私はレンダリングに切り替えました。 –