我有一个带有两个应用程序的django项目,users
用于登录/注销,timeline
用于主要功能。我需要将从users.log_in
登录的用户重定向到timeline.dashboard
视图。但它不起作用,我看到的只有404.
正如我在浏览器中看到的那样,Django想要打开http://localhost:8000/users/login/timeline.dashboard
而不是http://localhost:8000/timeline/dashboard/
那我该怎么办?
如果需要 - 这是我的代码:
项目的urls.py
urlpatterns = patterns('',
url(r'^admin/', include(admin.site.urls)),
url(r'^timeline/', include('timeline.urls')),
url(r'^users/', include('users.urls')),
)
时间轴/ urls.py
urlpatterns = patterns(
'timeline.views',
url(r'^$', views.index, name='index'),
url(r'^dashboard/$', views.dashboard, name='dashboard'),
)
用户/ views.py:
def log_in(request):
if request.method=='GET':
return render(request,
'login.html')
if request.method=='POST':
username = request.POST['username']
password = request.POST['password']
user = authenticate(username=username, password=password)
if user is not None:
login(request,user)
return redirect('timeline.dashboard')
else:
return redirect('log_in')
app_name.view_name
语法重定向args是我自己发明的,显然是错误的,但我在官方文档中看不到任何有用的东西。
谢谢!
答案 0 :(得分:3)
https://docs.djangoproject.com/en/1.7/topics/http/shortcuts/#redirect
以下是尝试的3件事。
尝试编号1和2未返回URL,因此redirect
使用了第三种解释输入的方法:原样,作为相对URL。
您可能打算匹配2. A view name
,在这种情况下只是dashboard
。
这个混淆来自于这个函数尝试多个URL查找方法并隐藏错误(并在某种程度上模糊了文档)。
有关#2的直接文档,请查看reverse
。
https://docs.djangoproject.com/en/1.7/ref/urlresolvers/#django.core.urlresolvers.reverse
答案 1 :(得分:-1)
您是否在独立模式下运行django?最佳实践是使用WSGI将django部署到apache中,并在httpd.conf中设置WSGI以将请求路由到具体应用程序以进行跨应用程序工作。