Min*_*nnR 3 django url if-statement detailview
我在 django views.py 中有一个 DetailView,我希望能够将来自 url ex:localhost:8000/myapp/details/3/ 的 pk 值和 request.user.id 与 if 语句进行比较。
视图中无外乎以下几行代码:
class UserDetail(DetailView):
model = Profile
template_name = 'details.html'
Run Code Online (Sandbox Code Playgroud)
任何帮助将非常感激。
在 DetailView 中,您可以访问self.request,self.args和self.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()),
]
Run Code Online (Sandbox Code Playgroud)
并且您的 UserDetail 现在可以访问request.user.id和 pk by self.kwargs['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()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2379 次 |
| 最近记录: |