我的网址有一个关键字“shop_name”变量。
还有带有“名称”字段的商店模型。
在我的 ListView 类中,我需要对 Shop 模型进行重复查询,以从 Shop.get_type() 方法获取 unicode 变量。根据结果,选择适当的模板目录或查询集(使用子类 django 模型)。
这是代码。
class OfferList(ListView):
def get_template_names(self):
shop = Shop.objects.get(name=self.kwargs['shop_name'])
return ["shop/%s/offer_list" % shop.get_type()]
def get_queryset(self):
shop = Shop.objects.get(name=self.kwargs['shop_name'])
Offer = shop.get_offers_model()
return Offer.objects.all()
def get_context_data(self, **kwargs):
# again getting shop instance here ...
shop = Shop.objects.get(name=self.kwargs['shop_name'])
context = super(OfferList, self).get_context_data(**kwargs)
context['shop'] = shop
return context
问题是最好的方法是什么,这样我可以获得一些可用于所有方法的 var (在本例中为商店)?我不是 python 专家(可能是基本问题)。我尝试过init重写,但随后我无法获取 Exchange_name (在 urls.py 中指定)来获取正确的“shop”实例。我想避免重复。
Thanks
将其保存在 self.shop 中。
get_queryset 是第一个调用的方法(参见BaseListView的get方法的代码 https://code.djangoproject.com/browser/django/trunk/django/views/generic/list.py#L114)。因此,一种解决方案是将变量放在那里,就像在代码中所做的那样,然后将其保存到 self.shop (就像 BaseListView 对 self.object_list 所做的那样)。
def get_queryset(self):
self.shop = Shop.objects.get(name=self.kwargs['shop_name'])
Offer = self.shop.get_offers_model()
return Offer.objects.all()
然后在其他方法中,您可以使用 self.shop:
def get_template_names(self):
return ["shop/%s/offer_list" % self.shop.get_type()]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)