Можно ли создать собственный класс в Django представлениях, чтобы избежать дублирования кода? - PullRequest
1 голос
/ 05 мая 2020

У меня есть 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 и не знаю, какие здесь хорошие привычки;)

1 Ответ

0 голосов
/ 05 мая 2020

Конечно, а почему бы и нет?

Просто абстрагируйте код следующим образом:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...