Skip to main content
 首页 » 编程设计

python之{{ user.get_profile.foo }} 在 Django 中不起作用

2024年10月24日31cyq1162

我试图在用户配置文件(我知道是原始的)中显示用户配置文件信息,但我无法让它工作,除非它是配置文件的表单 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 }}。