我对 Django 很陌生,我即将结束django 女孩教程。我在视图中的 post_detail 上方添加了“@login_required”(用于单击特定帖子的视图)并添加了 login.html 模板。所以当我点击一个帖子标题时,我会被重定向到我的登录页面(到目前为止,一切都很好),网址是:http: //127.0.0.1 :8000/accounts/login/?next=/post/11/ (在我的电脑自动取款机上试试这个。)
然后我输入我的管理员名称/密码并自动重定向到http://127.0.0.1:8000/accounts/profile/并且当然得到“找不到页面(404)”(因为我没有 url/view/模板)。我想“该死,我只是想被重定向到 /post/11/”!
环顾堆栈溢出,发现了这个问题:
Signing in lead to "/accounts/profile/" in Django (sounds about right)
并得到了答案
在您的 settings.py 中更改 LOGIN_REDIRECT_URL 的值。
所以我在 Django 文档中查找了 LOGIN_REDIRECT_URL:
默认值:'/accounts/profile/'
当 contrib.auth.login 视图没有获得 next 参数时,请求在登录后被重定向的 URL 。
例如,它由 login_required() 装饰器使用。
此设置还接受命名 URL 模式,可用于减少配置重复,因为您不必在两个位置(设置和 URLconf)定义 URL。
1.8 版后已弃用:该设置也可能是视图函数的虚线 Python 路径。对此的支持将在 Django 1.10 中删除。
但是我的 contrib.auth.login 没有得到下一个参数吗?(看看我的网址,最后说“?next=/post/11/”)请在这里帮帮我,我对这里可能出现的问题感到迷茫:(
您可以在以下位置查看页面:http:
//finbel.pythonanywhere.com/
和源代码在:
https ://github.com/Finbel/my-first-blog
更新(1):
所以我现在知道 LOGIN_REDIRECT_URL 是决定我下一步在哪里结束的东西,这必须意味着它忽略了 url 中的下一个参数。我进一步搜索了这个问题,发现这个问题与我的问题非常相似,即
文档说明我需要使用“下一个”参数和上下文处理器。我的模板中有 {{next}},但我对如何实际传递“/gallery/(username)”感到困惑。任何帮助将不胜感激。
(我的模板中什至没有 {{next}},我应该在哪里/如何添加它?)
该问题的首选答案似乎是:
Django 的登录视图 django.contrib.auth.views.login 接受一个名为 extra_context 的字典。字典中的值直接传递给模板。所以你可以用它来设置下一个参数。完成后,您可以设置一个名为 next 和 value {{ next }} 的隐藏字段,以便它在模板中呈现。
但我不确定如何解释这一点。在编写此编辑时,我在这篇文章(由 kacperd)上得到了答案,现在将通读)