我有一个Django 2应用,一次浏览一个大的“地方”记录,并且模板向每个添加了一些单选按钮集,用户可以在验证记录内容的过程中检查这些按钮集。我将每个记录包装成表格,提交后,我想a)在单独的“审阅”模型/表中从这些选择中创建一个新记录,并b)重定向到分页器的下一页。
我毫不费力地从表单单选输入创建新记录,然后重定向到确认页面。问题是如何重定向到相同的视图/模板但前进页面。
我尝试重定向到相同的视图,但URL不同:
path('place/', views.place, name='place'),
path('place/next', views.place, name='placenext'),
然后在视图中解析请求对象,但这将失败且没有错误:
def place(request):
paginator = Paginator(place_list, 1)
req = request.path
page = request.GET.get('page')
if req[-4:] == 'next':
records = paginator.get_page(str(int(page)+1))
else:
records = paginator.get_page(page)
context = {
'records': records, 'page': page
}
return render(request, 'review/place.html', context=context)
我还尝试了许多其他方法,包括以几种方式插入?page=
,但是它在黑暗中摸索着,因为文档中没有指示如何完成此操作的指示。据我所知,请求对象中没有任何东西可以使我成为“双重目的”视图-只是呈现记录或推进页面。
[正确答案,归因于下面的@Satendra]
单路径,具有GET或POST的单个视图返回相同,但如果为POST,则创建具有表单内容的新记录。谢谢
if request.method == 'POST':
# create Related record
relform = request.POST
related = Related.objects.create(
placeid = relform['placeid'],
...,
...
)
pprint(locals())
return render(request, 'review/place.html', context=context)
答案 0 :(得分:2)
不要为同一视图创建多个端点。
只需添加请求方法检查,然后在 POST 方法中使用
redirect
方法将其重定向到同一视图
from django.shortcuts import redirect, render
def place(request):
if request.method == 'GET':
...
# your code lies here when request is GET
return render(request, 'review/place.html', context=context)
else:
return redirect('place')