【发布时间】:2017-12-31 16:55:13
【问题描述】:
我想在函数视图中调用基于类的索引视图 我在登录函数视图中渲染索引模板,但是当我在索引模板中添加一个额外的上下文时,我从函数视图'它只渲染了额外的上下文,而不是已经由基于类的索引视图渲染的上下文。
所以我想我是否可以从函数中调用基于类的索引视图,以便我向基于类的视图添加额外的上下文并同时渲染它。
简而言之,我想从函数视图中添加额外的上下文并渲染它。
这是我的基于类的通用视图,用于在索引模板中列出对象。
class IndexView(generic.ListView):
template_name = 'polls/index.html'
title = 'hello'
num_visit = 'a'
context_object_name = 'question_list'
def get_queryset(self):
"""Return the last five published questions."""
return Question.objects.filter(pub_date__lte=timezone.now()).order_by('-pub_date')[:5]
这是我的登录视图,它与基于类的索引视图所呈现的模板相同
def login_view(request):
user = authenticate(request,username=request.POST['username'],password=request.POST['password'])
if user is not None:
login(request, user)
return redirect('polls:index')
return render_to_response('polls/index.html', {'error_message': 'wrong credentials'})
.................................................. ..
现在我可以登录索引模板,但查看添加的代码上下文不起作用,也许它起作用了,但我认为它确实与默认对象列表上下文混淆了。
class IndexView(generic.ListView):
template_name = 'polls/index.html'
title = 'sdasd'
num_visit = 'a'
context_object_name = 'question_list'
error_message = None
def get_queryset(self):
"""Return the last five published questions."""
return Question.objects.filter(pub_date__lte=timezone.now()).order_by('-pub_date')[:5]
def post(self, request, **kwargs):
user = authenticate(request, username=request.POST['username'], password=request.POST['password'])
if user is not None:
login(request, user)
return redirect('polls:index')
error_message = 'i love jesus'
context = self.get_context_data(request, error_message, **kwargs)
return render(request, 'polls:index', context)
def get_context_data(self, *args, **kwargs):
context = super(IndexView, self).get_context_data(**kwargs)
context['error_message'] = self.args
return context
模板代码....... 无法添加模板代码'这很复杂我在这里添加 https://codeshare.io/5zXYJb
【问题讨论】:
-
能发一些代码吗?
-
你永远不应该从另一个视图调用一个视图。如果您在两个视图中有公共代码,请将其移至视图之外的实用程序方法(创建 utils.py 文件)或将其移至模型中。您应该尝试将尽可能多的逻辑向下移动到您的模型中。
-
@IanKirkpatrick 我认为没有其他方法,因为我想在使用列表视图的同一索引页面中添加登录页面......我不想使用登录查看不同模板中的不同网址'我希望你明白这就是我想要挑战自我的方式。
-
@IanKirkpatrick 您的意思是作为模型登录以便我可以在任何视图中使用?
-
所以您想要在您的索引页面上有一个登录部分,而不是一个专门用于登录的单独页面?有点像亚马逊在每个页面顶部的快速登录?
标签: django django-views django-generic-views