如何从视图重定向到Django中的另一种视图



这是为我在django中的帖子应用程序编写的视图。问题在于,填写更新表格并提交后,成功发生了。但这会给用户带来混乱,因为在那里相同的HTML页面,我如何重定向到更新的对象?

def post_update(request,id=None):
    instance=get_object_or_404(Post,id=id)
    if instance.created_user != request.user.username :
        messages.success(request, "Post owned by another user, You are having read permission only")
        return render(request,"my_blog/denied.html",{})
    else :  
        form=PostForm(request.POST or None,request.FILES or None,instance=instance)
        if form.is_valid():
            instance=form.save(commit=False)
            instance.save()
        context={ "form":form,
                  "instance":instance }
        return render(request,"my_blog/post_create.html",context)

正如@mdegis所建议的,您可以使用django重定向函数重定向到另一个视图或url。

from django.shortcuts import redirect
def view_to_redirect_to(request):
    #This could be the view that handles the display of created objects"
    ....
    perform action here
    return render(request, template, context)
def my_view(request):
    ....
    perform form action here
    return redirect(view_to_redirect_to)

在此处和此处阅读有关重定向的更多信息

您可以使用RECERSE()方法和您重定向到的视图的命名url将位置或关键字参数传递到重定向快捷方式。

在urls.py

from news import views
url(r'^archive/$', views.archive, name='url_to_redirect_to')

在Views.py

from django.urls import reverse
def my_view(request):
    ....
    return redirect(reverse('url_to_redirect_to', kwargs={'args_1':value}))

更多关于反面的信息

您可以从HTTP快捷方式中使用redirect

from django.shortcuts import redirect
def my_view(request):
    ...
    object = MyModel.objects.get(...)
    return redirect(object) #or return redirect('/some/url/')

这是官方文档的链接。

要从视图重定向到另一种视图,您需要给出 App Name的conbination" myapp"&quot&quot'colon&quot'colon;以及" dest_view"的视图名称。在" myapp/urls.py">" "中的路径中设置。如下所示。而且,您无需修改" myApp/urls.py"中的路径''] 如下所示:

# "myapp/views.py"
from django.shortcuts import render, redirect
def redirect_view(request):
    # Here
    request.session['person'] = {'name': 'John', 'age': 27}
                    # Here
    return redirect("myapp:dest_view")
def destination_view(request):
    return render(request, 'myapp/index.html', {})

您需要给出视图名称" dest_view" to path() in &quot&quot&quot&quot'myapp/urls.py&quorts>'urls.py;下图:

# "myapp/urls.py" 
from django.urls import path
from . import views
app_name = "myapp"
urlpatterns = [                           # This is view name
    path('dest/', views.destination_view, name="dest_view")
]

那么,这是 django Template

# "myapp/index.html"
{{ request.session.person.name }} {# John #}
{{ request.session.person.age }}  {# 27 #}
from django.urls import reverse
def my_view(request):
    ....
    return redirect(reverse('url_to_redirect_to', kwargs={'args_1':value(object.id for specific id)}))

最新更新