Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/88.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.3-为基于类的视图定义可选参数的正确方法_Python_Django_Django Views_Parameter Passing_Django Urls - Fatal编程技术网

Python django 1.3-为基于类的视图定义可选参数的正确方法

Python django 1.3-为基于类的视图定义可选参数的正确方法,python,django,django-views,parameter-passing,django-urls,Python,Django,Django Views,Parameter Passing,Django Urls,我只是被基于类的视图弄得脏兮兮的 将可选参数的默认值传递给基于类的视图的正确方法是什么? 例如,我以前几乎是这样做的: 现在我不太确定如何在基于类的视图中实现相同的效果。i、 e.如何在视图中定义类,url.py中的条目应该是什么样子,以及如何定义可选参数的默认值?url参数存储在self.args和self.kwargs中。基于类的通用视图文档部分中有一些示例 您可以通过传递默认参数,也可以在从self.kwargs获取值时在视图中设置默认参数 my_value = self.kwargs.

我只是被基于类的视图弄得脏兮兮的

将可选参数的默认值传递给基于类的视图的正确方法是什么?
例如,我以前几乎是这样做的:


现在我不太确定如何在基于类的视图中实现相同的效果。i、 e.如何在视图中定义类,url.py中的条目应该是什么样子,以及如何定义可选参数的默认值?

url参数存储在
self.args
self.kwargs
中。基于类的通用视图文档部分中有一些示例

您可以通过传递默认参数,也可以在从
self.kwargs
获取值时在视图中设置默认参数

my_value = self.kwargs.get('key', 'default_value')

与这个问题有些关联。我一直在研究如何使用基于类的视图获取url参数,以添加一些额外的上下文。您可以这样做:

url(r'^param1/(?P<param1>\d+)/param2/(?P<param2>\d+)/$', ClassDetailView.as_view())
然后在模板中有{{param1}}和{{param2}}对象可供使用


我是新来的,所以如果有更好的方法,请随意修改一下。

对于那些碰巧看到这个问题的人,下面是我在1.3中最后要做的。这与我在1.1中所做的几乎相同(除了更详细)。(如我问题中的链接所述)

例如,URL.py中的相关行可能如下所示

...
# pass a default value of page = 1 for optional parameter page
url(r'^obj/list$', ObjListView.as_view(), {'page': 1}, name='obj_list'),
url(r'^obj/list/page(?P<page>[0-9]+)$', ObjListView.as_view(), name='obj_list'),
...
# both new and edit use the same class, but edit obviously needs an id for the object.
# i should probably just be using pk but whatever.
url(r'^obj/new$', ObjEditView.as_view(), name='obj_edit'),
url(r'^obj/edit/(?P<obj_id>[0-9]+)/$', ObjEditView.as_view(), name='obj_edit'), 

作为我在上述评论中向Alasdair提出的问题的推论,类中各种函数的执行顺序通常与它们在文档中的顺序相对应。i、 e.在UpdateView中,get_object()位于get_initial()之前。

谢谢@Alasdair。如果我选择在我的视图中设置默认值,那么应该将其放在哪里?我想对变量初始化的位置进行标准化。例如,在其他地方获取查询集、上下文数据?我个人认为应该在需要的方法中初始化变量,而不是在一个地方。如果需要使用多个方法访问变量,请编写方法获取值(例如,查看基于日期的视图中的
get_year
)。如果你真的想在一个地方初始化所有变量,那么我认为你需要重写
dispatch
,以保证你可以在所有方法中访问变量。是啊,我不希望每次都重写dispatch只是为了初始化变量。文件中有没有提到各种功能的执行顺序?e、 g.调度然后获取查询集,然后获取上下文数据,等等。。。。还是我必须通过代码来查找?谢谢
...
# pass a default value of page = 1 for optional parameter page
url(r'^obj/list$', ObjListView.as_view(), {'page': 1}, name='obj_list'),
url(r'^obj/list/page(?P<page>[0-9]+)$', ObjListView.as_view(), name='obj_list'),
...
# both new and edit use the same class, but edit obviously needs an id for the object.
# i should probably just be using pk but whatever.
url(r'^obj/new$', ObjEditView.as_view(), name='obj_edit'),
url(r'^obj/edit/(?P<obj_id>[0-9]+)/$', ObjEditView.as_view(), name='obj_edit'), 
class ObjEditView(UpdateView):
    ...
    form_class = ObjForm
    model=Obj
    ...

    # this puts our obj in self.object
    def get_object(self):
        # if the obj exists, intialize our variables with values from the obj instance
        # if it is a new obj, intialize accordingly
        try:
            obj = Obj.objects.get(id = self.kwargs['obj_id'])       
        except (KeyError, ObjectDoesNotExist):
            obj = Obj()

        return obj