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

问题描述 投票:0回答:1

我有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的新手,我不知道这里有什么好的习惯;)

python django
1个回答
0
投票

当然,为什么不呢?

就像这样把代码抽象出来。

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
© www.soinside.com 2019 - 2024. All rights reserved.