Я пытаюсь отобразить информацию профиля пользователя в профиле пользователей (оригинал, я знаю), но я не могу заставить его работать, если это не форма представления профиль. Я звоню 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-адреса, настройки или код администратора, сообщите мне; Я полагал, что это не актуально, и просто добавит беспорядок, но я рад добавить его, если это необходимо.
Что возвращает '{{user.foo}}' в ваш шаблон? – YPCrumble
Вы добавили свойство 'User.profile', но вы пытаетесь получить доступ к' user.get_profile' в своем шаблоне. – Alasdair
Я пробовал '{{user.foo}}', '{{User.get_profile.foo}}', '{{User.foo}}', и ни один из них ничего не возвращает. – 123