将mixin导入另一个应用程序以应用于基于类的视图时出现问题

时间:2015-01-23 04:45:31

标签: django import mixins

我有文件userprofiles / mixins.py,我在其中创建了这个mixin

from django.utils.decorators import method_decorator
from django.contrib.auth.decorators import login_required

class LoginRequiredMixin(object):
    @method_decorator(login_required(login_url = '/login/'))
    def dispatch(self, request, *args, **kwargs):

        return super(LoginRequiredMixin, self).dispatch(request, *args, **kwargs)

在我的文件userprofiles / views.py中,我有以下基于类的视图,名为ProfileView:

from .mixins import LoginRequiredMixin
class ProfileView(LoginRequiredMixin,TemplateView):
    template_name = 'profile.html'

    def get_context_data(self, **kwargs):
        context = super(ProfileView, self).get_context_data(**kwargs)

        if self.request.user.is_authenticated():
            context.update({'userprofile': self.get_userprofile()})

        return context

    def get_userprofile(self):
        return self.request.user.userprofile

在这个名为ProfileView的基于类的视图中,我可以毫无困难地从LoginRequiredMixin继承

这些mixin LoginRequiredMixin我也应用于名为AlbumListView的基于类的视图,该视图位于其他模块或app artists / views.py中。

基于类的视图AlbumListView是这样的:

from sfotipy.userprofiles.mixins import LoginRequiredMixin
class AlbumListView(LoginRequiredMixin,ListView):

    model = Album
    template_name = 'album_list.html'

        def get_queryset(self):
            if self.kwargs.get('artist'):
                queryset = self.model.objects.filter(artist__slug__contains=self.kwargs['artist'])
            else:
                queryset = super(AlbumListView, self).get_queryset()

            return queryset

导入LoginRequiredMixin时,我的IDE的独特方式不会标记错误,因为我继承了它:

from sfotipy.userprofiles.mixins import LoginRequiredMixin

我知道这种导入方式不正确,因为它是绝对导入的,正确的方法是进行相对导入。 其他方式应该在哪里工作:

from userprofiles.mixins import LoginRequiredMixin

但是,当我想要测试时,我收到以下错误消息......

enter image description here

如何进行此导入并且有效?

感谢您的定位:D

0 个答案:

没有答案