next parameter couldn't be passed

94 views
Skip to first unread message

nur syazwani

unread,
Jan 19, 2024, 6:10:25 PM1/19/24
to Django users

my authentication view:

class LoginView(auth_views.LoginView):

form_class = LoginForm

template_name = 'event/login.html'

def post(self, request, *args, **kwargs):

next_url = self.request.POST.get('next', reverse('event:create_table'))

response = super().post(request, *args, **kwargs)

redirect_url = reverse('event:login') + f"?next={next_url}"

#ログインできたら、前の画面・ホーム画面に戻る

if self.request.user.is_authenticated:

return redirect(next_url)

else:

return redirect(redirect_url)

return response

class RegisterView(generic.CreateView):

form_class = RegisterForm

template_name = 'event/register.html'

#登録できたら、前の画面・ホーム画面に戻る

def form_invalid(self, form):

messages.error(self.request, '会員登録に失敗しました。正しい情報を入力してください。')

next_url = self.request.POST.get('next', reverse('event:create_table'))

return redirect(next_url)

def get_success_url(self):

messages.success(self.request, '会員登録完了!ログインしてください')

next_url = self.request.POST.get('next', reverse('event:create_table'))

return next_url


my login html:

<h1>ログイン</h1>


<form action="{% url 'event:login' %}" method="POST">

{% csrf_token %}

{{ form.as_p }}

<input type="hidden" name="next" value="{{ request.GET.next }}">


<!-- ログインボタン -->

<button type="submit" class="submit-button" id="submit">ログイン</button>

</form>

My problem was it didn't redirect to the previous page after login. It worked before this but suddenly it didn't. The url included the previous url in the next parameter but after submitting the form, it redirect to the default event:create_table. Can someone give me any idea why did this happen??

i tried changing to request.POST.get('next', reverse('event:create_table')) and it kinda seems to work, but previously i use request.POST it didn't work so now I am confused. And in my test case, request.POST didnt redirect to the correct url but request.GET did so I don't know my django website couldn't work properly

Temkin Mengistu

unread,
Jan 21, 2024, 3:35:30 PM1/21/24
to Django users
You should set LOGIN_REDIRECT in the setting here is the docs  Settings | Django documentation | Django (djangoproject.com)


Sample code. 

settings.py
```python
from django.url import lazy_reverse
...
LOGIN_REDIRECT_URL =  reverse('event:create_table')

```
Reply all
Reply to author
Forward
0 new messages