创建类似于另一个的视图

问题描述:

我必须在django项目中进行一些更改,尽管我熟悉python,但我并没有与django配合使用。创建类似于另一个的视图

这是我的情况:

我有一个表“字段”的表。我需要做的是让用户根据字段的值对表格进行排序(是/否)。

我看着views.py,我意识到有是排序根据id表视图:

users = User.objects.all().order_by('id') 

我的问题是:

  1. 我怎样才能使视图根据url参数对表进行排序?
  2. 我是否必须创建另一个视图,或者可以使用相同的修改吗?

您可以使用相同的视图。

def myView(request): 
    get_param = request.GET.get('my_param', 'id') 
    #some more processing 
    users = User.objects.order_by(get_param) #note - you dont need the `all()` 

    #rest of the code here. 
+0

警告:此代码可能用于对用户模型的任何字段进行排序,因此如果您有任何与其关联的敏感数据(例如,用户帐户的余额),则此视图可能用于获取某些间接关于它的信息。而且,'order_by'可能跨越ForeignKey关系,所以这个代码可能被用来猜测你的数据库的结构。在传递给'order_by'之前,你应该检查'get_param'的值。 – 2013-05-14 17:12:03

+0

这并不一定会使答案错误。此外,答案提供了一个总体思路 - 不是完整的解决方案。 OP可以弄清楚他想如何实现它 – karthikr 2013-05-14 17:13:28

这取决于你想在你的模板中呈现什么。如果两个视图都会呈现类似的html,那么最好在通用视图中重构它们,并根据GET参数进行排序。

我喜欢分离关注点,所以另一种方法可能是重构辅助函数中的视图代码,并在每个视图内用分隔的url来调用它。

如果视图不呈现类似的html,并且在各个方面都彼此不同,只是它们在某些地方排序某些内容,那么我认为最好的方法是分别对两个视图进行编码。

这只是一个考虑问题,但回答你的问题,你可以得到GET params访问request.GETrequest.POST取决于方法。

希望它有帮助!