[英]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
–代表當前登錄user
的auth.User
實例(如果未登錄客戶端,則為AnonymousUser
實例)。perms
–django.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.