Django 如何在同一个基于类的视图中传递两个模板

Django 如何在同一个基于类的视图中传递两个模板,django,django-views,django-templates,Django,Django Views,Django Templates,我对django模板视图有一个问题 我有两个网址 1) 对于当前用户配置文件 2) 为了他的队友 url.py path('profile/', views.UserprofileIndex.as_view(), name='user-profile'), path('profile/<int:pk>', views.TeamProfileIndex.as_view(), name='team-profile'), 在这两个视图中,只有一个查询正在更改,即“用户配置文件” 有没有办

我对django模板视图有一个问题

我有两个网址

1) 对于当前用户配置文件

2) 为了他的队友

url.py

path('profile/', views.UserprofileIndex.as_view(), name='user-profile'),
path('profile/<int:pk>', views.TeamProfileIndex.as_view(), name='team-profile'),
在这两个视图中,只有一个查询正在更改,即“用户配置文件”

有没有办法在一个视图中将其传递到两个不同的html页面

我试过下面的方法

类UserprofileIndex(TemplateView): #模板名称='accounts/profile/index.html'

def initialize(self, *args, **kwargs):
    self.pk = None
    self.pk = kwargs.get('pk')

def get_template_names(self, *args, **kwargs):
    if self.pk:
        return 'accounts/profile/team_profile.html'
    else:
        return 'accounts/profile/index.html'

def get_context_data(self, **kwargs):
    context = dict()
    try:
        if self.pk:
            user_profile = UserProfile.objects.get(user=self.pk)
        else:
            user_profile = Profile.objects.get(user=self.request.user)
    except Profile.DoesNotExist:
        logger.error("Requested user profile not available")
        raise Http404

    teams = User.objects.all()
    context.update(
        {
            'user_profile': user_profile,
            'teams' : teams
        }
    )
    return context

但它不起作用

这会起作用的。但我建议使用DetailView

class UserProfile(TemplateView):
    """
    User profile view
    """
    user_profile = None
    template_name = 'accounts/profile/index.html'
    team_profile_template_name = 'accounts/profile/team_profile.html'

    def get_user_profile(self):
        """
        Get user
        """
        if not self.user_profile:
            user_profile_pk = self.kwargs.get('pk')
            model, filter_kwargs = (UserProfile, dict(user=user_profile_pk)) \
                if user_profile_pk else (Profile, dict(user=self.request.user))
            self.user_profile = get_object_or_404(model, **filter_kwargs)
        return self.user_profile

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        context.update(dict(user_profile=self.get_user_profile(),
                            teams=User.objects.all()))
        return context

    def get_template_names(self):
        if self.kwargs.get('pk'):
            return [self.team_profile_template_name]
        return super().get_template_names()

但我有两个视图,一个是index.html,另一个是team_profile.htmlOh,现在我将修复it@Anoop我添加了获取模板。您的代码有一个错误。他将模板作为字符串返回。Django要求返回列表我在学习python我觉得你的代码有很高的标准,因为如果我写了5行代码,你可以在一行中实现它,你能帮我达到你的标准吗?如果不是self.user\u profile:user\u profile\u pk=self.kwargs.get('pk')model,filter\u kwargs=(UserProfile,dict(user=user\u profile\u pk))\if user\u profile\u pk else(profile,dict(user=self.request.user))self.user\u profile=get\u object\u或\u 404(model,**filter\u kwargs)返回self.user\u profile
class UserProfile(TemplateView):
    """
    User profile view
    """
    user_profile = None
    template_name = 'accounts/profile/index.html'
    team_profile_template_name = 'accounts/profile/team_profile.html'

    def get_user_profile(self):
        """
        Get user
        """
        if not self.user_profile:
            user_profile_pk = self.kwargs.get('pk')
            model, filter_kwargs = (UserProfile, dict(user=user_profile_pk)) \
                if user_profile_pk else (Profile, dict(user=self.request.user))
            self.user_profile = get_object_or_404(model, **filter_kwargs)
        return self.user_profile

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        context.update(dict(user_profile=self.get_user_profile(),
                            teams=User.objects.all()))
        return context

    def get_template_names(self):
        if self.kwargs.get('pk'):
            return [self.team_profile_template_name]
        return super().get_template_names()