自动设置所有django CBV中next的值
Automatically set the value of next in all django CBV
我希望我的网站像这样工作:
尝试前往URL。 (=> 应成为 'next' 参数)
你被重定向到登录页面,因为你没有登录。
登录后,应该会带您到'next.'
到目前为止,我在 S.O 上看到过,没有人以这种方式构建他们对 next 的用法。而且文档根本没有帮助。其他人都问如何重定向 如果您明确单击登录。
我是否必须修改每个 CBV 中的每个 get_success_url() 或 get_context_data() 方法才能正确地为其提供 'next' 参数?我什至不知道哪个视图实际上在说 "oh you're not logged in, go to /login/ ," 因为如果我能说我至少可以尝试覆盖该方法并给它 request.path 参数。我假设它是 AuthenticationMiddleware 或 LoginRequiredMiddleware
显然它不是 "LoginView" (django 1.11) 因为当我在 dispatch 方法上放置一个断点时,它在任何地方都看不到我最初尝试的 URL,它只是看到
request.path = '/登录/'
如何获取 "originally intended url" 的值并将其设置为 'next' 参数,以便它重定向到 '/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 请直说。不过,我认为这在这里并不重要,因为我在传递 'next' 时没有问题,只要它首先位于 context 中。
使用下面的中间件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',
)
我希望我的网站像这样工作:
尝试前往URL。 (=> 应成为 'next' 参数)
你被重定向到登录页面,因为你没有登录。
登录后,应该会带您到'next.'
到目前为止,我在 S.O 上看到过,没有人以这种方式构建他们对 next 的用法。而且文档根本没有帮助。其他人都问如何重定向 如果您明确单击登录。
我是否必须修改每个 CBV 中的每个 get_success_url() 或 get_context_data() 方法才能正确地为其提供 'next' 参数?我什至不知道哪个视图实际上在说 "oh you're not logged in, go to /login/ ," 因为如果我能说我至少可以尝试覆盖该方法并给它 request.path 参数。我假设它是 AuthenticationMiddleware 或 LoginRequiredMiddleware
显然它不是 "LoginView" (django 1.11) 因为当我在 dispatch 方法上放置一个断点时,它在任何地方都看不到我最初尝试的 URL,它只是看到
request.path = '/登录/'
如何获取 "originally intended url" 的值并将其设置为 'next' 参数,以便它重定向到 '/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 请直说。不过,我认为这在这里并不重要,因为我在传递 'next' 时没有问题,只要它首先位于 context 中。
使用下面的中间件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',
)