Django 在不同应用程序中的视图之间重定向()

Django 在不同应用程序中的视图之间重定向(),django,Django,我正在学习Django教程,其中博客应用程序和用户应用程序是分开的。注册为用户后,我希望该用户被重定向到博客应用程序中的视图。以下是用户应用程序视图。py: def register(request): if request.method == 'POST': # if form was submitted w data form = UserCreationForm(request.POST) #instantiate form w post data

我正在学习Django教程,其中
博客
应用程序和
用户
应用程序是分开的。注册为用户后,我希望该用户被重定向到
博客
应用程序中的视图。以下是
用户
应用程序
视图。py

def register(request):
    if request.method == 'POST': # if form was submitted w data
        form = UserCreationForm(request.POST) #instantiate form w post data
        if form.is_valid():
            username = form.cleaned_data.get('username')
            messages.success(request, f'Account created for {username}')
            return redirect('blog-home') #not working
    else:
        form = UserCreationForm()
    return render(request, 'users/register.html', {'form':form})
from django.shortcuts import render
from django.http import HttpResponse
from .models import Post

# Create your views here.
def home(request):
    posts = Post.objects.all()
    return render(request, 'blog/home.html', {'posts':posts})
下面是
博客
应用程序的
视图.py

def register(request):
    if request.method == 'POST': # if form was submitted w data
        form = UserCreationForm(request.POST) #instantiate form w post data
        if form.is_valid():
            username = form.cleaned_data.get('username')
            messages.success(request, f'Account created for {username}')
            return redirect('blog-home') #not working
    else:
        form = UserCreationForm()
    return render(request, 'users/register.html', {'form':form})
from django.shortcuts import render
from django.http import HttpResponse
from .models import Post

# Create your views here.
def home(request):
    posts = Post.objects.all()
    return render(request, 'blog/home.html', {'posts':posts})
以及与所述视图关联的url模式:

path('', views.home, name = 'blog-home'),
当用户提交表单时,我收到以下错误:
Reverse for'home'not found'“主视图”不是有效的视图函数或模式名称。


我不确定这是为什么,我相信我逐字复制了代码,视频中的示例正在运行

如果要重定向到名为“blog-home”的url,则需要反向(“blog-home”)

您的url不是“主页”,而是“博客主页”。您的错误提到您试图反转为“home”

如果您更改了视图,它应该可以工作:

def寄存器(请求):
if request.method=='POST':#如果表单是用数据提交的
form=UserCreationForm(request.POST)#实例化表单w POST数据
如果form.is_有效():
username=form.cleaned\u data.get('username'))
messages.success(请求,f'Account created for{username}')
返回重定向(反向('blog-home'))
其他:
form=UserCreationForm()
返回呈现(请求'users/register.html',{'form':form})

如果要重定向到名为“blog-home”的url,则需要反转(“blog-home”)

您的url不是“主页”,而是“博客主页”。您的错误提到您试图反转为“home”

如果您更改了视图,它应该可以工作:

def寄存器(请求):
if request.method=='POST':#如果表单是用数据提交的
form=UserCreationForm(request.POST)#实例化表单w POST数据
如果form.is_有效():
username=form.cleaned\u data.get('username'))
messages.success(请求,f'Account created for{username}')
返回重定向(反向('blog-home'))
其他:
form=UserCreationForm()
返回呈现(请求'users/register.html',{'form':form})

在应用程序的URL.py中提及应用程序名称,以便您可以重定向到任何应用程序的视图

blog/url.py

app_name = 'blog'
urlpatterns =[...
]
现在你可以像这样重定向到博客应用程序主视图

return redirect ('blog:blog_home')
#return redirect ('app_name:url_name')

在你的应用程序的url.py中提及app_名称,这样你就可以重定向到任何应用程序的视图

blog/url.py

app_name = 'blog'
urlpatterns =[...
]
现在你可以像这样重定向到博客应用程序主视图

return redirect ('blog:blog_home')
#return redirect ('app_name:url_name')

我没有意识到我的blog/urls.py中已经有了这一点,教程的代码可以正常工作,因为它们没有。无论如何,很高兴知道如果inlcude app_name我需要在redirect()中引用它。谢谢,这很有效。我没有意识到我的博客/url.py中已经有了这个,教程的代码也可以正常工作,因为它们没有。无论如何,很高兴知道如果inlcude app_name我需要在redirect()中引用它。谢谢,这个有用。