簡體   English   中英

Django的get_context_data函數不起作用?

[英]Django's get_context_data function not working?

我正在使用Django的基於類的視圖進行練習。

似乎我重寫的get_context_data函數無法正常工作,但我不知道出什么問題了:(

我的代碼:

urls.py

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

views.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函數中傳遞了'user'變量,但是html頁面沒有顯示user.username ...為什么會這樣:( ??

謝謝

使用不是user其他名稱。 似乎RequestContext覆蓋了user變量。

請參閱默認的TEMPLATE_CONTEXT_PROCESSORS ,它設置了django.contrib.auth.context_processors.auth

如果TEMPLATE_CONTEXT_PROCESSORS包含此處理器,則每個RequestContext將包含以下變量:

  • user –代表當前登錄userauth.User實例(如果未登錄客戶端,則為AnonymousUser實例)。
  • permsdjango.contrib.auth.context_processors.PermWrapper的實例,代表當前登錄用戶所擁有的權限。

因此,最好給您的user變量另一個名稱。

就像其他答案所說的那樣,不要使用變量名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已經調查了pk URL參數,它將自動選擇並返回合適的User

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM