Python 冗余django码

Python 冗余django码,python,django,django-views,django-generic-views,Python,Django,Django Views,Django Generic Views,我有一些我写的代码,它工作得非常好 from django.shortcuts import get_object_or_404 from django.views.generic import ListView from cab.models import Language class LanguageDetail(ListView): def get_queryset(self): slug = self.kwargs['slug'] langu

我有一些我写的代码,它工作得非常好

from django.shortcuts import get_object_or_404
from django.views.generic import ListView
from cab.models import Language

class LanguageDetail(ListView):


    def get_queryset(self):
        slug = self.kwargs['slug']
        language = get_object_or_404(Language, slug=slug)
        return language.snippet_set.all()

    paginate_by = 20
    template_name = 'cab/language_detail.html'

    def get_context_data(self, **kwargs):
        slug = self.kwargs['slug']
        language = get_object_or_404(Language, slug=slug)
        context = super(LanguageDetail, self).get_context_data(**kwargs)
        context['language'] = language
        return context
我的问题是我在两个函数中重复了两行代码,我不喜欢这样

slug = self.kwargs['slug']
language = get_object_or_404(Language, slug=slug)
我怎样才能避免呢??
提前谢谢。

你的意思是这样的吗

def get_slug(self, name):   
    slug = self.kwargs[name]
    return get_object_or_404(Language, slug=slug)
可以使用as
language=self.get\u slug('slug')

请记住,如果
kwargs
不包含
name
,那么它将抛出一个错误。要防止这种情况,您可以采取以下措施:

slug = self.kwargs.get(name, None)
if slug is not None:
    ...

将其重构为一个单独的函数/方法该函数最终将被调用两次,但没有问题。我认为这是我们能做的最好的了。我在想是否有办法扩展两个函数中使用的变量的作用域。@AmrFouad:要“扩展”作用域,可以将变量
slug
转换为实例变量,并在其前面加上
self.
。但我认为这并不能解决冗余问题。我的意思是,您需要确保在使用变量时已经设置了它。@stummjr我试图在类中直接使用它作为
slug=self.kwargs[“slug”]
,但它引发了一个错误
self没有定义
@AmrFouad您确定您尝试的方法将
self
作为其第一个参数吗?(正如我前面提到的,我不认为使用变量作为实例变量(带有
self
前缀)是一个好的解决方案,因为您必须注意变量是否已设置,因此它不能解决您的问题。)@stummjr我的意思是,当我试图在没有方法的情况下将该行直接放到类中时,
slug=self.kwargs[“slug”]
引发了错误
self未定义
。因此,我可以获取正在搜索的语言对象,然后在另一个函数
get\u queryset
get\u context\u data
中使用它。