在基于Django类的视图中基于URL加载不同的HTML页面

时间:2018-02-08 10:14:32

标签: python django python-3.x django-1.8 classview

目前我的urls.py有以下代码:

login_view = LoginView.as_view()
url(r'^login$', login_view, name='login'),

我在views.py中编写了相应的LoginView:

class LoginView(FormView):
    template_name = 'auth/login.html'
    form_class = forms.LoginForm

现在我的要求是我想为来自不同网址的不同用户组创建一个登录页面。例如myproject.com/customers。 我可以使用新的View类来完成它。但是我想让它成为通用的并在同一个LoginView()类中处理它。

是否可以捕获url参数并检查LoginView()内部并为它们加载不同的login.html页面?或者还有其他方法可以用来处理这种情况吗?

1 个答案:

答案 0 :(得分:0)

由于您使用的是FormView,因此您可以在示例中覆盖以下方法,如下所示。模板以render_to_response方法呈现。

def render_to_response(self, context, **response_kwargs):
    """
    Returns a response, using the `response_class` for this
    view, with a template rendered with the given context.
    If any keyword arguments are provided, they will be
    passed to the constructor of the response class.
    """

    # Write you logic here
    if self.request.something == "customer":
        template = "customer_login.html"
    else:
        template = "user_login.html"
    #######
    response_kwargs.setdefault('content_type', self.content_type)
    return self.response_class(
        request=self.request,
        template=template,
        context=context,
        using=self.template_engine,
        **response_kwargs
    )

您可以https://ccbv.co.uk/projects/Django/1.11/django.views.generic.edit/FormView/

了解更多信息