我有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