在所有django CBV中自动设置next的值
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在所有django CBV中自动设置next的值相关的知识,希望对你有一定的参考价值。
我希望我的网站像这样工作:
- 尝试转到URL。 (=>应该成为'下一个'参数)
- 您将被重定向到登录页面,因为您尚未登录。
- 登录后,它会带你到“下一个”。
从来没有人以这种方式构建他们对next的使用,到目前为止我已经在S.O.上看到了。并且文档根本没有帮助。如果您明确单击“登录”,其他人都会询问如何重定向。
我是否必须在每个CBV中修改每个get_success_url()或get_context_data()方法以正确地为其提供'next'参数?我甚至不知道哪个视图实际上在说“哦,你没有登录,转到/ login /”,因为如果我能说我至少可以尝试覆盖该方法并给它request.path参数。我假设它是AuthenticationMiddleware,或LoginRequiredMiddleware
显然它不是“LoginView”(django 1.11),因为当我在那里的调度方法上放置断点时,它在任何地方都看不到我原来的尝试URL,它只是看到
request.path ='/ login /'
如何获取“原始目标网址”的值并将其设置为“下一个”参数,以便重定向到'/ login /?next = next_page'而不是'/ login /?
urlpatterns = [
url(r'^login/$',
login,
{
'template_name': 'login.html',
'authentication_form': BootstrapAuthenticationForm,
'extra_context':
{
'title': 'Log in',
'year': timezone.now().year,
},
},
name='login'),
url(r'^logout$',
logout,
{
'next_page': 'login',
},
name='logout'),
如果你想看到我的login.html,请说出来。我认为这并不重要,因为我在传递'下一个'时没有问题,只要它首先在上下文中。
使用以下中间件TomasTomecek
# in settings.py
LOGIN_URL = '/login/'
LOGIN_EXEMPT_URLS = (
r'^about.html$',
r'^legal/', # allow any URL under /legal/*
)
MIDDLEWARE_CLASSES = (
# ...
'python.path.to.LoginRequiredMiddlewareFromTomasTomecek',
)
以上是关于在所有django CBV中自动设置next的值的主要内容,如果未能解决你的问题,请参考以下文章
为啥我需要在 Django 中将 kwargs 设置为 CBV 的参数
如何使用 CBV 在我的所有 Django 模板中创建侧边栏?