如何将参数传递给django通用视图 [英] How to pass parameters to django generic views

查看:115
本文介绍了如何将参数传递给django通用视图的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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



Urlpattern

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

查看类

  class NewReportView 
template_name =report / newreportview.html
context_object_name =newreportview
def get_queryset(self):
task = get_object_or_404(MyTask,applicationnnumber = self.args [0])
返回任务

我猜这行中有错误

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

错误信息:

 异常类型:IndexError 
异常值:
元组索引超出范围

我应该如何将数字传递给通用视图并获取Mytask对于这个'数字'?



谢谢

解决方案

错过了整个观点的整体观点。对于一个简单的DetailView - 它是单个对象的视图 - 您只需定义模型 slug 属性类:

 (r'^ newreportview /(\d +)/ $',NewReportView.as_view()),

class NewReportView(DetailView):
template_name =report / newreportview.html
model = MyTask
slug ='applicationnnumber'

(您也可以轻松地将这三个作为参数传递到URL定义中,因此无需再创建一个子类。 / p>

您没有获得 self.args 的值的原因是您已将参数作为kwarg传递,不是一个参数。所以 self.kwargs ['number'] 将会工作,我在这里显示的修改后的URL也是如此。


I would like to pass a number to my generic view (DetailView) to get one object Here is my code

Urlpattern

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

View Class

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

I guess something is wrong in this line

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

error message:

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

How should I pass 'number' to this generic view and get a Mytask object with this 'number'?

Thanks

解决方案

You have missed the entire point of generic views. For a simple DetailView - which is a view of a single object - you just define the model and slug attributes in the class:

(r'^newreportview/(\d+)/$', NewReportView.as_view()),  

class NewReportView(DetailView):
    template_name = "report/newreportview.html"
    model = MyTask
    slug = 'applicationnnumber'

(You could also just as easily have passed those three as parameters in the URL definition, so no need to make a subclass at all.)

The reason why you were getting no values for self.args is that you had passed your parameter as a kwarg, not an arg. So self.kwargs['number'] would have worked, as would the revised URL I've shown here.

这篇关于如何将参数传递给django通用视图的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆