簡體   English   中英

表單提交后重定向到分頁頁面 - Django

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM