Загрузка другой HTML-страницы на основе URL в представлении на основе классов Django

В настоящее время мой urls.py имеет этот код:

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

Я написал соответствующий LoginView в моем views.py:

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

Теперь мое требование состоит в том, чтобы я хотел создать страницу входа для другого набора пользователей, которые пришли бы с другого URL. Например myproject.com/customers, Я могу сделать это с помощью нового класса View. Но я хочу сделать его универсальным и обрабатывать его в том же классе LoginView().

Можно ли перехватить параметр url и проверить его внутри LoginView() и загрузить для них другую страницу login.html? Или есть какой-то другой способ, с помощью которого мы можем справиться с этой ситуацией?

1 ответ

Так как вы используете 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/

Другие вопросы по тегам