Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.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视图中创建自己的类以避免代码重复?_Python_Django - Fatal编程技术网

Python 是否可以在Django视图中创建自己的类以避免代码重复?

Python 是否可以在Django视图中创建自己的类以避免代码重复?,python,django,Python,Django,我有3个子页面要重定向到,每个子页面必须包含相同的代码: new_user = User.objects.get(username=user) user_profile = Profile.objects.get(user=new_user) adverts = Advert.objects.filter(user=new_user) editable = False if request.user.username == user: editab

我有3个子页面要重定向到,每个子页面必须包含相同的代码:

new_user = User.objects.get(username=user)
    user_profile = Profile.objects.get(user=new_user)
    adverts = Advert.objects.filter(user=new_user)
    editable = False
    if request.user.username == user:
        editable = True
    context = {
        "objects":adverts,
        "user_profile":user_profile,
        "no_data":"No comments",
        "editable":editable,
        "user":user
    }
而且只有上下文中的“对象”发生了变化。3几乎相同的方法;看起来不太好。有没有一种方法可以从一个类继承该代码,或者创建自己的标记来实现?我刚到django,不知道这里有什么好习惯;)

当然,为什么不呢

只需将代码抽象出来,如下所示:

class View1(View):
    def get(self, request, *args, **kwargs):
        [...]
        context = makeContext(request, user, Adverts)   # or whoever `user` is
        return render(request, 'template.html', context)

def makeContext(request, user, model):
    new_user = User.objects.get(username=user)
    user_profile = Profile.objects.get(user=new_user)
    objects = model.objects.filter(user=new_user)
    editable = False
    if request.user.username == user:
        editable = True
    context = {
        "objects": objects,
        "user_profile": user_profile,
        "no_data": "No comments",
        "editable": editable,
        "user": user
    }
    return context
当然,为什么不呢

只需将代码抽象出来,如下所示:

class View1(View):
    def get(self, request, *args, **kwargs):
        [...]
        context = makeContext(request, user, Adverts)   # or whoever `user` is
        return render(request, 'template.html', context)

def makeContext(request, user, model):
    new_user = User.objects.get(username=user)
    user_profile = Profile.objects.get(user=new_user)
    objects = model.objects.filter(user=new_user)
    editable = False
    if request.user.username == user:
        editable = True
    context = {
        "objects": objects,
        "user_profile": user_profile,
        "no_data": "No comments",
        "editable": editable,
        "user": user
    }
    return context

好的,我需要创建基本方法,比如makeContext,然后创建3个视图类,对吗?@deri yes exactlycool:)您能解释一下如何在每个类中修改上下文吗?@deri您可以通过将想要的变量添加到“makeContext”签名中,然后通过“makeContext()”函数参数将其提供给它。然后,您可以在共享函数中使用它们。如果我要编辑上下文的项,该怎么办?恰好是字典对象的第一项。你介意编辑代码让我看一下吗?抱歉打扰您:)好的,我需要创建基本方法,比如makeContext,然后创建3个视图类,对吗?@deri yes exactlycool:)您能解释一下如何在每个类中修改上下文吗?@deri您可以通过将您想要的变量添加到“makeContext”签名中,然后通过“makeContext()传递它来实现这一点'函数参数。然后,您可以在共享函数中使用它们。如果我要编辑上下文的项,该怎么办?恰好是字典对象的第一项。你介意编辑代码让我看一下吗?抱歉打扰您:)