我正在使用django-registration和django-profiles构建应用程序。在页面的任何地方,我都有显示当前登录用户数据的部分(如名字和姓氏,使用如{{ user.first_name }}
这样的语法),它可以正常工作。它是通过子页面模板完成的,这些模板扩展了一个带有HTML结构的主模板和上面提到的部分。
现在我尝试将用户图片(使用{{ profile.image }}
)添加到该部分,但{{ profile }}
模板变量的可用性存在问题,但页面如下:
在 settings.py 中我有:
AUTH_PROFILE_MODULE = 'intranet.UserProfile'
TEMPLATE_CONTEXT_PROCESSORS = (
'django.core.context_processors.static',
)
将"django.contrib.auth.context_processors.auth",
添加到TEMPLATE_CONTEXT_PROCESSORS
不会改变任何内容。
models.py 中的我的UserProfile类是:
class UserProfile(models.Model):
user = models.OneToOneField(User)
image = models.ImageField(upload_to=user_image_name,
blank=True, null=True, verbose_name='User photo')
urls.py :
(r'^profiles/edit/', 'profiles.views.edit_profile', {'form_class': ProfileForm, }),
(r'^profiles/', include('profiles.urls')),
所以其余部分默认设置在 django-profiles urls.py 文件中。
我希望能够在应用程序的模板中使用 {{ profile }}
模板变量(不仅在配置文件页面上)来实现它可以在其他人扩展的主模板中使用它。
请让我知道如何才能得到这个。任何帮助将非常感激。
我在版本1.3.1中使用Django,在版本0.7中使用django-registration,在版本0.2中使用django-profiles。
答案 0 :(得分:5)
我想你想要user.get_profile()
。
如果您在RequestContext
的上下文处理器列表中使用auth
并拥有settings.py
,请尝试{{user.get_profile.image}}
并查看它是否符合您的要求。
答案 1 :(得分:1)
由于以下原因,我认为上述“彼得罗威尔”的答案在这个具体案例中一定对您有用,
但是如果你需要任何其他对象(例如,id为2的Entry对象,或者如果你没有“django.contrib.auth.context_processors.auth”),你可以在字典中提供任何对象从您的视图中的模板如下
def view_needing_profile(request):
c_user = request.user
c_profile = c_user.get_profile()
c_entry = Entry.objects.get(id=2)
return render(request, 'template_using_profile_and_entry.html',
{'profile' : c_profile, 'entry' : c_entry } )
答案 2 :(得分:1)
你也可以在你的userprofile app models.py文件
中加入这样的东西 # Fetches the user profile if it exists, otherwise, it creates one
User.get_or_create_profile = property(lambda u: Profile.objects.get_or_create(user=u)[0])
这可确保您始终返回个人资料对象。