我试图在用户配置文件(我知道是原始的)中显示用户配置文件信息,但我无法让它工作,除非它是配置文件的表单 View 。我使用 {{form.instance.user}} 在我的用户配置文件编辑表单中调用 user 和 foo 并且工作正常。
我已经在我的静态用户配置文件模板 (loggedin.html) 中实现了 {{ user.get_profile.foo }} 但没有任何反应。
我的静态用户配置文件 (loggedin.html) 模板如下所示:
{% extends "base.html" %}
{% block content %}
<title>{% block title %} | {{ username }}{% endblock %}</title>
<h2>Hi, {{ username }}!</h2>
<h3>{{ user.get_profile.foo }}</h3>
<a href="/accounts/profile/">Edit Profile</a>
{% endblock content %}
loggedin.html 的 View :
def loggedin(request):
return render_to_response('loggedin.html', {'username':request.user.username, 'user':request.user})
我的用户个人资料编辑表单(profile.html)模板:
{% extends "base.html" %}
{% block content %}
<title>{% block title %} | Edit Profile{% endblock %}</title>
<h2>Edit {{ username }}</h2>
{% for field in form %}
{{ field.error }}
{% endfor %}
<form action="/accounts/profile/" method="post">{% csrf_token %}
<label for="id_user">Username:</label>
<br>
<input id="id_user" name="user" type="text" value="{{form.instance.user}}">
<br><br>
<label for="id_foo">Foo:</label>
<br>
<input id="id_foo" name="foo" type="text" value="{{form.instance.foo}}">
<br><br>
<input type="submit" value="Update">
</form>
{% endblock content %}
我的用户资料(表单)模型:
from django.db import models
from django.contrib.auth.models import User
class UserProfile(models.Model):
user = models.OneToOneField(User)
foo = models.CharField(max_length=30)
User.profile = property(lambda u: UserProfile.objects.get_or_create(user=u)[0])
我的用户个人资料(表单) View :
from django.shortcuts import render_to_response
from django.http import HttpResponseRedirect
from django.core.context_processors import csrf
from forms import UserProfileForm
from django.contrib.auth.decorators import login_required
from userprofile.models import UserProfile
@login_required
def user_profile(request):
user = request.user
username = request.user.username
if request.method == 'POST':
form = UserProfileForm(request.POST, instance=request.user.profile)
if form.is_valid():
form.save()
return HttpResponseRedirect('/accounts/loggedin')
else:
profile = user.profile
form = UserProfileForm(instance=profile)
args = {}
args.update(csrf(request))
args['form'] = form
args['user'] = user
args['username'] = username
return render_to_response('profile.html', args)
我可以获取 username 和 foo 值以在用户配置文件表单中正常显示,但是当我尝试获取相同的信息以在静态配置文件中显示时,它不起作用。
完全披露:我的静态配置文件在一个名为 polls 的应用程序中,它不同于我的编辑表单模型和模板所在的 userprofile 应用程序,但我不确定这是否与此问题有关。
如果您需要查看我的网址、设置或管理代码,请告诉我;我认为它不相关,只会增加困惑,但我很乐意在需要时添加它。
请您参考如下方法:
您的属性是 User.profile。因此你应该试试
{{ user.profile.foo }}
在您的模板中,而不是 {{ user.get_profile.foo }}。
