【问题标题】:How to pass parameters to django generic views如何将参数传递给 django 通用视图
【发布时间】:2012-01-17 12:11:49
【问题描述】:

我想将一个数字传递给我的通用视图 (DetailView) 以获取一个对象这是我的代码

网址格式

(r'^newreportview/(?P<number>\w+)/$', NewReportView.as_view()),  

查看类

class NewReportView(DetailView):
    template_name = "report/newreportview.html"
    context_object_name = "newreportview"
    def get_queryset(self):
        task= get_object_or_404(MyTask,applicationnnumber=self.args[0])
        return task

我猜这行有问题

name = get_object_or_404(MyTask,applicationnnumber=self.args[0])

错误信息:

Exception Type: IndexError
Exception Value:
tuple index out of range

我应该如何将“数字”传递给这个通用视图并获得一个带有这个“数字”的 Mytask 对象?

谢谢

【问题讨论】:

    标签: django django-views django-class-based-views


    【解决方案1】:

    您已经错过了通用视图的全部要点。对于一个简单的 DetailView - 它是单个对象的视图 - 您只需在类中定义 modelslug 属性:

    (r'^newreportview/(\d+)/$', NewReportView.as_view()),  
    
    class NewReportView(DetailView):
        template_name = "report/newreportview.html"
        model = MyTask
        slug = 'applicationnnumber'
    

    (您也可以很容易地在 URL 定义中将这三个作为参数传递,因此根本不需要创建子类。)

    您没有得到self.args 的值的原因是您将参数作为kwarg 而不是arg 传递。所以self.kwargs['number'] 会起作用,我在这里显示的修改后的 URL 也会起作用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-04
      • 2017-12-13
      • 2011-12-09
      • 2017-07-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多