Python Django重定向到不在同一应用程序中的视图

Python Django重定向到不在同一应用程序中的视图,python,html,django,url,view,Python,Html,Django,Url,View,我在Django项目中有一个名为users的应用程序。登录到users/login.html后,我希望它转到URL/home.html 我的模板结构是: --> users | .....-->login.html --> base.html --> home.html 由于某些原因,它无法找到home.html。以下是用户应用程序中的my views.py和url.py: views.py from django.http import HttpRespon

我在Django项目中有一个名为users的应用程序。登录到users/login.html后,我希望它转到URL/home.html

我的模板结构是:

--> users

|  
.....-->login.html

--> base.html

--> home.html
由于某些原因,它无法找到home.html。以下是用户应用程序中的my views.py和url.py:

views.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'),
]

你需要像这样改变你的主视图

@login_required
def home(request):
    return render(request, 'home.html', {})
另外,在登录视图中

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)
编辑

或者,您可以将视图导入到项目_level url.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/”

请不要链接到图像。在此处以文本形式显示代码。在任何情况下,您没有“/home.html”的URL,您有“/home/”的URL
返回HttpResponseRedirect(“/”)
,并且在URL模式中,您应该将第一个URL规则(
URL(r'^$”…
)放在下一个规则之后(
URL(r'^login/$)
)您能让我更深入地了解一下context dict的实际功能吗?我查看了文档,但仍然不确定它的用途。context dict提供了需要呈现给模板的变量或对象。它告诉模板这些变量来自django视图,需要在html模板中公开。我们在模板中使用{{}}标记来指定它们。希望您有想法。非常感谢。我将我的主视图和登录视图更改为您所说的,现在我得到“找不到'home'的反向。home'不是有效的视图函数或模式名。”你在你的项目中为你的应用程序级URL添加了名称空间吗?是的,我的名称空间是“用户”