[英]Redirect to paginated page after form submit - Django
我使用分頁器創建一系列滿足特定條件的頁面。
每個頁面都包含一個用戶可以提交的表單。
提交表單后,我希望他們留在/返回到他們所在的頁面。 我怎么做?
我到處搜索並閱讀文檔,但找不到答案。
我確定問題出在電腦前面,但請幫忙:)
以下是應該執行此操作的視圖:
def assignment(request, pk):
"""View for each assignment"""
if request.user.is_authenticated():
#### Get correct articles
assignment = get_object_or_404(Assignment, pk=pk)
country = assignment.country.ccode
start_date = assignment.start_date
end_date = assignment.end_date
articles = Article.objects.filter(country=country).filter(pub_date__range=(start_date,end_date))
paginator = Paginator(articles, 1)
#### Pagination ####
page = request.GET.get('page')
try:
articles = paginator.page(page)
except PageNotAnInteger:
articles = paginator.page(1)
except EmptryPage:
articles = paginator(page(paginator.num_pages))
#### Forms ####
if request.method == 'POST':
if 'event' in request.POST:
event_form = EventRecordForm(request.POST, prefix='event')
if event_form.is_valid():
obj = event_form.save(commit=False)
obj.article = paginator.page(page).object_list[0]
obj.classified = True
obj.coder = request.user.coder
obj.save()
return HttpResponseRedirect(reverse ('coding:assignment', args=(pk,)))
relevance_form = RelevanceCodingRecordForm(prefix='relevance')
elif 'relevance' in request.POST:
relevance_form = RelevanceCodingRecordForm(request.POST, prefix='relevance')
if relevance_form.is_valid():
obj = relevance_form.save(commit=False)
obj.article = paginator.page(page).object_list[0]
obj.screened = True
obj.coder = request.user.coder
obj.save()
return HttpResponseRedirect(reverse ('coding:assignment', args=(pk,)))
event_form = EventRecordForm(prefix='event')
else:
event_form = EventRecordForm(prefix='event')
relevance_form = RelevanceCodingRecordForm(prefix='relevance')
else:
print ERROR
return render(request, 'coding/assignment.html',
{'articles':articles,'assignment':assignment,'event_form':event_form,'relevance_form':relevance_form})
編輯:
相關建議我將?next={{request.path}}
附加到我的表單操作中。
但是,這不起作用,因為路徑中不包含分頁器頁面。 做他建議的事情: http://127.0.0.1:8000/coding/assignment/1/?next=/coding/assignment/1/
: http://127.0.0.1:8000/coding/assignment/1/?next=/coding/assignment/1/
: http://127.0.0.1:8000/coding/assignment/1/?next=/coding/assignment/1/
不過,我確實給了分頁器第二眼,並認為?page={{ articles.number }}
應該可以工作,因為在文檔中的示例中,他們做了這樣的鏈接:
<a href="?page={{ articles.next_page_number }}">next</a>
但是,這不起作用。
還有其他想法嗎?
我認為頁面參數應該在 request.path 中,所以嘗試將其附加到模板中的提交操作:
?next={{request.path}}
並確保在 settings.py 文件中將 request 作為模板上下文處理器。 (詳見https://stackoverflow.com/a/1711592/837845 )
因此,對於重定向到分頁頁面的每個人來說,我所做的首先是查看主頁,我將此頁面的分頁存儲在會話中:
request.session['previous_page'] = request.path_info + "?page=" + request.GET.get("page", '1')
現在查看從表單返回 HttpResponseRedirect 接收 POST 請求:
return HttpResponseRedirect(request.session['previous_page'])
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.