这是为我在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)}))