#django #django-class-based-views
#django #Представления на основе классов django
Вопрос:
Когда посетитель выходит из системы и посещает мою домашнюю страницу, я хочу, чтобы он видел регистрационную форму. Когда пользователь войдет в систему, он будет перенаправлен обратно на домашнюю страницу, но будет отображаться представление, похожее на listview.
Лучший способ добиться этого ListView
— подклассировать оба FormView
и переопределить каждый метод, необходимый для получения желаемого поведения? Или есть лучший способ? Проверка подлинности пользователя в каждом методе не похожа на способ Django сделать это. Надеюсь, для этого есть разумный подход к шаблону проектирования, о котором я не знаю.
class HomepageView(ListView, FormView):
def get_template_names(self):
if self.request.user.is_authenticated:
return ['homepage/loggedin_index.html']
else:
return ['homepage/loggedout_index.html']
def get_context_data(self, **kwargs):
if self.request.user.is_authenticated:
...
else:
...
def ... and so on
Мое обязательное требование заключается в том, что URL-адрес как для вошедших, так и для вышедших из системы пользователей должен соответствовать корневому URL-адресу, поскольку это домашняя страница.
from django.urls import path
from .views import HomepageView
app_name = 'homepage'
urlpatterns = [
path('', HomepageView.as_view(), name='index'),
]
Ответ №1:
Существует также CreateListView, который делает то, что вы хотите. И затем вы можете изменить его form
на тот, который вы хотите.