在模板上下文处理器中访问基于功能的视图中的PK

时间:2015-05-06 15:24:12

标签: python django

我正在构建一个模板上下文处理器来调用我拥有的每个页面的PK,并且PK在base.html中调用它,我已经实现了与其他查询一起做模板上下文处理器,但现在我需要传递PK。上下文p效果很好,但上下文edit没有,我如何从基于函数的视图中调用PK?

例如:localhost:8000 / path / 8,我需要在上下文中传递8 edit

  def my_processor(request):
        context = {'edit':InfoPredioGeneral.objects.filter(pk=self.kwargs['pk']),
                   'p':InfoPredioGeneral.objects.filter(user_id=request.user).latest('id')}
        return context

我知道它不起作用,因为self并且kwargs未定义。但是我该怎么做呢?

1 个答案:

答案 0 :(得分:3)

您使用的是FBV而不是CBV,因此您使用的 self 应与类方法一起使用,回答您的问题,您应该传递 id 参数在视图中,做这样的事情:

def my_processor(request, id):
    context = {'edit':InfoPredioGeneral.objects.filter(pk=id),
               'p':InfoPredioGeneral.objects.filter(user_id=request.user).latest('id')}
    return context
在你的urls.py中你应该写下这样的东西:

url(r'^path/(?P<id>\d+)', my_processor, name='my_processor')