如何将数据库查询集对象从基于类的视图(类SignUp(generic.CreateView))传递到Django中的模板

时间:2019-01-20 11:27:27

标签: python django django-class-based-views

views.py

from django.shortcuts import render
from django.urls import reverse_lazy
from django.views import generic
from .forms import CustomUserCreationForm

class SignUp(generic.CreateView):
    form_class = CustomUserCreationForm
    success_url = reverse_lazy('login')
    template_name = 'signup.html'

urls.py

urlpatterns = [
    url(r'signup/', views.SignUp.as_view(), name='signup'),
    url(r'^$', TemplateView.as_view(template_name='home.html'), name='home'),
]

我使用django自定义用户创建方法来注册用户,其工作正常。但是如何在我的类SignUp中将对象传递给模板。我是基于类的视图的新手。请帮我。

2 个答案:

答案 0 :(得分:1)

要传递上下文,您可以编写

context_object_name = 'username'

现在想想你正在制作一个待办事项应用程序并希望按照他们的要求打印任务 然后,您可以在基于类的视图中执行以下操作,

def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        context['tasks'] = context['tasks'].filter(user=self.request.user)
        context['count'] = context['tasks'].count()

通过这种方式,您可以在基于类的视图中编写数据库查询集。

如果你想要一个完美的指南或源代码来学习 django 身份验证,即登录和注销用户功能,我建议你读一遍本教程,这是一个待办事项列表应用程序,可以解决你的疑惑

To Do list app with django authentication and queryset in class based views

上面的源代码在这里:

Source code

答案 1 :(得分:0)

您需要重写error_log("Your Message", 3, "log_file_path"); 类中的get_context_data方法,如下所示:

SignUp

并在模板中使用它:

class SignUp(generic.CreateView):
    form_class = CustomUserCreationForm
    success_url = reverse_lazy('login')
    template_name = 'signup.html'

    def get_context_data(self, **kwargs):
       context = super(SignUp, self).get_context_data(**kwargs)
       context['your_qset'] = YourModel.objects.all()
       return context