我试图为每位作者制作单独的页面,以显示他们的姓名和帖子。我似乎无法显示用户名。
views.py
class UserProfileView(generic.ListView):
template_name = 'howl/user-profile.html'
context_object_name = 'user_howls'
def get_queryset(self):
author = self.request.user
u = User.objects.get(username=author)
return Howl.objects.filter(author=u)
models.py
class Howl(models.Model):
author = models.ForeignKey(User, null=True)
content = models.CharField(max_length=150)
这就是我被困的地方。
用户profile.html
{% extends 'howl/base.html' %}
{% block content %}
<h1>User: {{user_howl.author}}</h1>
{% for user_howl in user_howls %}
<ul>
<li>{{user_howl.content}}</li>
</ul>
{% endfor %}
{% endblock %}
内容显示得很好,但标题只是说&#34;用户:&#34;,如何在不使用for循环的情况下为其提供上下文? 我试过了:
{% for author in user_howls.author %}
<h1>User: {{author}}</h1>
{% endfor %}
和
{% if user_howls.author %}
<h1>User: {{user_howl.author}}</h1>
{% endif %}
结果相同,显示&#34;用户:&#34;
答案 0 :(得分:3)
user_howls
是一个查询集,因此它不具备author
属性,您需要获取迭代对象的作者
{% for howl in user_howls %}
<h1>User: {{ howl.author}}</h1>
{% endfor %}
更重要的是,当你刚刚返回user_profile的结果时,从Howl
列表开始是没有意义的,使用{{1}也没有意义}}。所以相反,从用户开始,然后查找它的嚎叫
ListView
答案 1 :(得分:1)
由于您的查询集基于属于当前用户的帖子,因此您可以快速完成所有这些操作并直接向用户显示:
User: {{ user }}