Python 是否可以在Django视图中创建自己的类以避免代码重复?
我有3个子页面要重定向到,每个子页面必须包含相同的代码: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
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()传递它来实现这一点'函数参数。然后,您可以在共享函数中使用它们。如果我要编辑上下文的项,该怎么办?恰好是字典对象的第一项。你介意编辑代码让我看一下吗?抱歉打扰您:)