Загрузка другой 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/