我的 Django 项目中有一个名为 users 的应用程序。登录 users/login.html 后,我希望它转到 URL/home.html
我的模板结构是:
--> users
|
.....-->login.html
--> base.html
--> home.html
由于某种原因,它无法找到 home.html。这是我在用户应用程序中的views.py和urls.py:
View .py
from django.http import HttpResponseRedirect
from django.shortcut import render
from django.contrib.auth import login
from django.contrib.auth.decorators import login_required
from .forms import LoginForm
def login_view(request):
"""
Function based view for handling log-in
"""
form = LoginForm(request.POST or None)
if request.POST and form.is_valid():
user = form.login(request)
if user:
login(request, user)
return HttpResponseRedirect('/home/html')
return render(request, 'users/login.html', {'form': form})
@login_required(login_url='login/')
def home(request):
return render(request, 'home', {'home': home})
url.py
from django.conf.urls import url
from . import views
urlpatterns = [
url(r'^$', views.home, name='home'),
url(r'^login/$', views.login_view, name='login'),
]
最佳答案
您需要像这样更改您的主页 View ,
@login_required
def home(request):
return render(request, 'home.html', {})
另外,在您的login_view中,
def login_view(request):
if request.method=="POST":
form = LoginForm(request.POST)
if form.is_valid():
username = form.cleaned_data.get('username')
password = from.cleaned_data.get('password')
user = authenticate(username=username, password=password)
if user:
login(request, user)
return redirect('users:home')
else:
form = LoginForm()
context = dict(form=form)
return render(request, 'users/login.html', context)
编辑
或者您可以将 View 导入到project_level urls.py
像这样, 从 users.views 导入主页
urlpatterns = [
url(r'^admin/', admin.site.urls),
#leave it blank...
url(r'^/', include('users.urls', namespace='users')),
url(r'^home/', home, name='home'),
]
不要忘记从 users.urls.py 文件中删除 URL。 然后,您的主页将是 "/home" 而不是 "users/home/"..
关于python - Django 重定向到不在同一个应用程序中的 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44141216/