2013-04-03 85 views
0

所以,我的功能基本視目前看起來是這樣的,我想將其更改爲基於類視圖函數到類視圖(的DetailView)Django的

我的功能視圖

def user_detail(request, username): 
    try: 
     user = User.objects.get(username=username) 
    except User.DoesNotExist: 
     raise Http404 

我的班級基於瀏覽

class UserProfileDetail(DetailView): 
    model = User 
    template_name = "profiles/user_detail.html" 
    #use username instead of pk 
    slug_field = "username" 

我的網址

url(r"^user/(?P<slug>[\w-]+)/$", UserProfileDetail.as_view(), name="user_detail"), 

問題是,當我轉到http://exampe.com/user/username網址時,我收到匿名用戶配置文件。我不想那樣。我必須對UserProfileDetail類進行哪些更改?

預先感謝您

回答

1

你需要重寫context_object_name,因爲默認情況下,django.contrib.auth.context_processors.auth{{ user }}模板上下文變量要麼request.userAnonymousUser。所以,你需要重寫上下文

覆蓋的context_object_nameDetailView

# Detail Views 
class UserDetailView(DetailView): 
    model = User 
    template_name = "profiles/user_detail.html" 
    #use username instead of pk 
    slug_field = "username" 
    #override the context user object to user_profile 
    context_object_name = "user_profile" 

,並在模板上使用

{{ user_profile }} 
1

您已經添加slug_field = "username"到你的類,這是在這種情況下不正確。 slug_field在你的情況下應該只是"slug",因爲這是the named group你給你的url的用戶名部分:.../(?P<slug>[\w-]+)/...。 Django的自動假設你slug_field被稱爲slug所以你可以簡單地刪除行slug_field = "username"完全或將網址變更爲:

url(r"^user/(?P<username>[\w-]+)/$", UserProfileDetail.as_view(), name="user_detail"), 
+0

坑,我完全錯了,我認爲 – 2013-04-03 18:56:32

+0

是的,我認爲你錯了。我知道我必須在我的UserProfileDetal類中做類似get_queryset和get_object的類似功能的基本視圖user = User.objects.get(username = username) – user2241826 2013-04-03 19:58:31