Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在Django 1.5基于类的视图中访问URL变量_Python_Django - Fatal编程技术网

Python 在Django 1.5基于类的视图中访问URL变量

Python 在Django 1.5基于类的视图中访问URL变量,python,django,Python,Django,我正在将一个项目从Django 1.2迁移到Django 1.5。项目使用基于功能的视图,例如: def notecard_product(request, stockcode): if request.user.is_authenticated(): liked = Recommendation.objects.values_list('product_id',flat=True).filter(recommended=True, user=request.user)

我正在将一个项目从Django 1.2迁移到Django 1.5。项目使用基于功能的视图,例如:

def notecard_product(request, stockcode):
    if request.user.is_authenticated(): 
        liked = Recommendation.objects.values_list('product_id',flat=True).filter(recommended=True, user=request.user)
        unliked = Recommendation.objects.values_list('product_id',flat=True).filter(recommended=False, user=request.user)
        extra_context = {"liked" : liked, "unliked":unliked}
    else:
        extra_context = {"liked" : [0], "unliked": [0]}
    return object_detail(request, queryset=Product.objects.live(),
                         object_id=stockcode,
                         extra_context=extra_context,
                         template_name='products/notecard.html', template_object_name='notecard_product')`enter code here`
在本摘录中,
stockcode
从URL中捕获,并用于确定
对象id
。因此,我想知道如何在基于类的视图中实现这一点。这就是我到目前为止所做的:

class NotecardProductListView(ListView):
    queryset=Product.objects.live()
    pk=self.kwargs['stockcode']
    template_name='products/notecard.html'
    context_object_name='notecard_product'

    def get_context_data(self, **kwargs):
        context = super(BooksListView, self).get_context_data(**kwargs)
        if self.request.user.is_authenticated(): 
            liked = Recommendation.objects.values_list('product_id',flat=True).filter(recommended=True, user=self.request.user)
            unliked = Recommendation.objects.values_list('product_id',flat=True).filter(recommended=False, user=self.request.user)
            extra_context = {"liked" : liked, "unliked":unliked}
        else:
            extra_context = {"liked" : [0], "unliked": [0]}
        context.update(extra_context)
        return context
pk
是旧
object\u id
kwarg的新名称。显然,这段代码不起作用,因为我无法访问函数之外的
self
。但我真的不知道该怎么做。我需要在关键字参数中设置
pk
,但找不到这样做的方法,因为
pk
需要在任何函数之外的类主体中设置。我也没有真正的方法去试验和尝试,因为整个项目现在因为不推荐的函数调用而被破坏了


谢谢

我不知道你是从哪里想到
pk
object\u id
的新名称,也不知道你为什么认为需要将它设置为每个请求的值。基于类的视图中的类级属性的要点是,它们是按视图类而不是按实例设置的:它们指的是视图查找值的位置,而不是实际值本身


您的第一个错误是,旧的
对象详细信息
视图的等价物是
详细信息视图
,而不是
列表视图
。如文档所示,ListView能够通过从的继承来显示对象细节。mixin需要一个名为
pk\u url\u kwarg
的类级属性,该属性是从标识对象pk的url捕获的参数的名称:在您的例子中,这是字符串
“stockcode”
。实例本身负责在任何特定请求中查找该值,您不需要这样做。

在新视图中,您需要在哪里使用该
pk
值?非常感谢。我把object_列表和object_细节搞混了,所以这是我的问题之一。出于某种原因,我在类属性方面真的很愚蠢。这就是我对
pk
变量感到困惑的地方。事实上,我还是有点困惑。引用:“在
DetailView
上,
object\u-id
视图的
object\u-id
参数已被重命名为
pk
”,所以你的意思是,我应该设置
pk\u-url\u-kwarg='stockcode'
,而不必担心
pk
object-id
?我认为这是个糟糕的措辞。正如SingleObjectMixin文档所示,“默认情况下,pk_url_kwarg是‘pk’”——因此迁移文档混淆了参数值和属性名称。但是是的,你应该按照你描述的去做。好的,很好。我想我只是把事情弄得太复杂了。基于类的泛型视图确实很有意义,但我希望迁移文档更详细一点。谢谢你,你帮了我大忙!