这是我的项目结构
project
app
login
manage.py
成功登录后,我希望我的用户将重定向到localhost:8000/app
,但目前它会重定向到http://localhost.com:8000/accounts/login/?next=/
,因为我将其设置为我的登录视图
def login_view(request):
if request.POST and form.is_valid():
user = form.login(request)
if user:
login(request, user)
return render_to_response('app/home.html',RequestContext)
else:
return HttpResponse('disabled account')
return render_to_response('login.html', form ,RequestContext)
我无法使用HttpResponseRedirect(reverse('app.views.dashboard'))
,因为信息中心视图未退出同一登录 views.py
如果我导入像
from app import views as app_dashboard
或from app import dashboard
我收到以下错误
反向'app.views.dashboard',找不到参数'()'和关键字参数'{}'。尝试了0种模式:[]
最后的注释,下面是我的登录网址
<a href="{% url "django.contrib.auth.views.login" %}?next={{request.path}}" id="signIn">Sign in</a>
加了:
应用程序/ urls.py
urlpatterns = patterns('app.views',
(r'^$', 'dashboard_view'),
项目/ urls.py
url(r"^", include("app.urls",)),
(r'^accounts/login/$', 'django.contrib.auth.views.login'),
(r'^accounts/logout/$', 'django.contrib.auth.views.logout', {'next_page' : '/accounts/login'}),
答案 0 :(得分:0)
第一点:使用已命名的网址,参见https://docs.djangoproject.com/en/1.6/topics/http/urls/#naming-url-patterns - 这可以解决您的reverse
问题。
第二点:您显示自己的登录视图的代码,但您的url.py
和模板的摘录都引用django.contrib.auth.views.login
。另外,您在模板的网址中指定了next
参数,因此django.contrib.auth.views.login
会将您重定向到那里,如FineManual(tm)中所述:
如果通过POST使用用户提交的凭据进行调用,则会尝试将用户登录。 如果登录成功,视图将重定向到next中指定的URL。 (...)
最后:如果您想要的是强制登录视图始终重定向到同一个URL,则无需编写自己的视图:
(...)如果未提供next,则会重定向到settings.LOGIN_REDIRECT_URL(默认为/ accounts / profile /)。如果登录失败,则重新显示登录表单。
IOW:
reverse
或{% url %}
模板标签时使用网址名称)next=...
settings.LOGIN_REDIRECT_URL
设置为信息中心的网址。答案 1 :(得分:-1)
def login_view(request):
if request.POST and form.is_valid():
user = form.login(request)
if user:
login(request, user)
return redirect('/app/')
else:
return HttpResponse('disabled account')
return render_to_response('login.html', form ,RequestContext)
更改渲染响应以重定向 提供您需要的网址重定向