2015-09-10 4 views
2

Я пытаюсь отобразить информацию профиля пользователя в профиле пользователей (оригинал, я знаю), но я не могу заставить его работать, если это не форма представления профиль. Я звоню user и foo в моем профиле редактирования профиля с {{form.instance.user}}, и он отлично работает.{{user.get_profile.foo}} не работает в Django

Я внедрил {{ user.get_profile.foo }} в мой статический шаблон профиля пользователя (loggedin.html), но ничего не происходит.

Мой статический профиль пользователя (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:

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]) 

Мой профиль (форма) вид:

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, где находятся моя модель и шаблон формы, но я не уверен, что это имеет какое-либо отношение к этой проблеме.

Если вам нужно увидеть мои URL-адреса, настройки или код администратора, сообщите мне; Я полагал, что это не актуально, и просто добавит беспорядок, но я рад добавить его, если это необходимо.

+0

Что возвращает '{{user.foo}}' в ваш шаблон? – YPCrumble

+0

Вы добавили свойство 'User.profile', но вы пытаетесь получить доступ к' user.get_profile' в своем шаблоне. – Alasdair

+0

Я пробовал '{{user.foo}}', '{{User.get_profile.foo}}', '{{User.foo}}', и ни один из них ничего не возвращает. – 123

ответ

2

Ваша недвижимость User.profile. Поэтому вы должны попробовать

{{ user.profile.foo }} 

в шаблоне, вместо {{ user.get_profile.foo }}.