2014-09-06 36 views
0

我在django views.py中有一個DetailView,我希望能夠比較來自url ex:localhost:8000/myapp/details/3 /和帶有if語句的request.user.id的pk值。如何使用URL中的值和Django DetailView中的請求?

沒有什麼比在視圖中的代碼下面幾行:

class UserDetail(DetailView): 
    model = Profile 
    template_name = 'details.html' 

任何幫助將非常感激。

+1

你必須在此改變高清get_context_data(個體經營,** kwargs):你會得到PK = self.kwargs ['PK '] – 2014-09-06 11:27:23

回答

1

在DetailView中您可以訪問self.requestself.argsself.kwargs

編號:https://docs.djangoproject.com/en/dev/topics/class-based-views/generic-display/#dynamic-filtering

在你的urls.py添加如下內容:

urlpatterns = [ 
    #... 
    url(r'^details/(?P<pk>[0-9]+)/$', UserDetail.as_view()), 
] 

和你UserDetail現在可以訪問由self.kwargs['pk']request.user.id和PK(見參考上面:kwargs是基於名稱,所以你可以通過self.kwargs['name']訪問它,而self.args是基於位置的,所以你可以通過self.args [0]來訪問它)。

如果我正確理解您的問題,您試圖操縱DetailView的查詢集,以僅噹噹前登錄用戶試圖訪問他的頁面時才返回數據。 如果這是真的,那麼你應該重寫get_queryset在你的類,像:

def get_queryset(self): 
    if self.kwargs['pk'] == self.request.user.id: 
     return Profile.objects.filter(id=self.request.user.id) 
    else: 
     return Profile.objects.none() 
+0

我在UserDetail類中使用了下面的代碼,並且我得到一個NameError:name'self'is not defined ...... if self.kwargs ['pk']!= request.user.id: queryset = Profile.objects.none() – MiniGunnR 2014-09-10 05:05:07

+0

你也許忘了把自己傳遞給你的函數?像這樣:def myFunction(self): – 2014-09-11 12:05:07

+1

我加入到我原來的答案中,檢查這是否有助於更多。 – 2014-09-11 12:33:07

相關問題