Django 如何在同一个基于类的视图中传递两个模板
我对django模板视图有一个问题 我有两个网址 1) 对于当前用户配置文件 2) 为了他的队友 url.pyDjango 如何在同一个基于类的视图中传递两个模板,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'), 在这两个视图中,只有一个查询正在更改,即“用户配置文件” 有没有办
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()