0

我正在练习 Django 的基于类的视图。

似乎我覆盖的 get_context_data 函数无法正常工作,但我不知道出了什么问题:(

我的代码:

网址.py

url(r'^user/(?P<pk>\d+)/posts/$', UserPosts.as_view(), name='user_post'),

视图.py

class UserPosts(ListView):
    template_name = 'app_blog/user_posts_page.html'
    context_object_name = 'post_list'

    def get_queryset(self):
        self.user = get_object_or_404(User, id=self.kwargs['pk'])
        return self.user.post_set.order_by('-id')
    def get_context_data(self, **kwargs):   
        context = super(UserPosts, self).get_context_data(**kwargs)
        context['user'] = self.user
        return context

user_post_page.html

{% block content %}
    <div class="main_content">
        <h2>Welcome to {{user.username}}'s User Post Page!</he>
        <ul>
        {% for post in post_list %}
            <li><a href="/blog/post/{{post.id}}/">{{post.post_title}}</a></li>
        {% endfor %}
        </ul>
    </div>
{% endblock %}

html页面正确显示用户的post_list,但h2标签显示:

Welcome to 's User Post Page!

我很确定我在 get_context_data 函数中传递了“用户”变量,但是 html 页面没有显示 user.username ...知道为什么会发生这种情况:(??

谢谢

4

3 回答 3

0

请查看默认TEMPLATE_CONTEXT_PROCESSORS设置django.contrib.auth.context_processors.auth

如果TEMPLATE_CONTEXT_PROCESSORS包含此处理器,则 eachRequestContext将包含以下变量:

  • userauth.User代表当前登录用户的实例(或AnonymousUser实例,如果客户端未登录)。
  • perms– 的实例django.contrib.auth.context_processors.PermWrapper,表示当前登录用户拥有的权限。

所以你最好给你的user变量另一个名字。

于 2013-07-27T06:58:26.873 回答
0

使用另一个不是user. 似乎 RequestContext 覆盖user变量。

于 2013-07-27T06:52:40.293 回答
0

正如其他答案所说,不要使用变量 name user。但更重要的是,在这种特殊情况下,这ListView并不是最好的泛型类;相反,您最好使用DetailView,这会使您的视图更简单:

class UserPosts(DetailView):
    model = User
    template_name = 'app_blog/user_posts_page.html'
    context_object_name = 'listed_user'

模板中唯一的变化是使用listed_user而不是user变量。由于DetailView已经查看了pkURL 参数,它会User自动选择并返回正确的。

于 2013-07-27T19:25:23.897 回答