Python 动态URL的Django分页

Python 动态URL的Django分页,python,django,pagination,Python,Django,Pagination,我有一个下拉列表来筛选医生专业并显示所选专业的医生。Doclisting是显示医生列表的视图。如果人们没有从下拉列表中选择任何内容,它只会转到这个url/doclistings/?selection=Choose+a+Speciality…&submit=,并显示所有医生。如果单击第2页,则分页也会起作用,依此类推/doclistings/?page=2 当人们选择一个专业时就会出现问题,例如牙医/doclistings/?speciality=dentor&gender=select+a+ge

我有一个下拉列表来筛选医生专业并显示所选专业的医生。Doclisting是显示医生列表的视图。如果人们没有从下拉列表中选择任何内容,它只会转到这个url
/doclistings/?selection=Choose+a+Speciality…&submit=
,并显示所有医生。如果单击第2页,则分页也会起作用,依此类推
/doclistings/?page=2

当人们选择一个专业时就会出现问题,例如牙医
/doclistings/?speciality=dentor&gender=select+a+gender&language=Choose+a+language
,然后单击分页第2页,它只会显示没有牙医的通用
/doclistings/?page=2
。单击分页时不会保存专门化

以下是doclisting视图,用于显示医生列表

def doclistings(request):
    d = getVariables(request)
    if request.method == "GET":
        form = DropdownSelectionForm(request.GET)
        try:
            s_name = request.GET['speciality']
        except:
            s_name = None
        try:
            l_name = request.GET['language']
        except:
            l_name = None
        try:
            g_name = request.GET['gender']
        except:
            g_name = None

        d['s_name'] = s_name 
        d['l_name'] = l_name
        d['g_name'] = g_name


        try:
            doctors = filter_doctors(request=request, specialization=s_name, gender=g_name, language=l_name).order_by('-netlikes')
            paginator = Paginator(doctors, 15) # Show 15 doctors per page
            page = request.GET.get('page')

        except Exception:
            return error404(request)


        if doctors == None: 
            return error404(request)

        if len(doctors) == 0:
            d['not_found'] = "anything you want here :)"

        try:
            doctors = paginator.page(page)

        except PageNotAnInteger:
            doctors = paginator.page(1)

        except EmptyPage:
            doctors = paginator.page(paginator.num_pages)

    else:
        form = DropdownSelectionForm()

    d['doctors'] = doctors
    d.update({'form': form, 'languages': Language.objects.all()})
    return render_to_response('m1/doclistings.html',d, context_instance=RequestContext(request))
这是过滤医生的观点

def filter_doctors(request=None, specialization=None, language=None, gender=None):
    query = Doctor.objects.filter()

    if specialization and specialization != "All Doctors":
        try:
            spec = Specialization.objects.get(name = specialization) # assuming that no errors here
            query = query.filter(specialization=spec)
        except:
            return None
    if language and language != "Choose a Language":
        try:
            lang = Language.objects.get(name=language)
            query = query.filter(language=lang)
        except:
            return None
    if gender and gender != "Select a Gender":
        if gender != "Male" and gender != "Female":
            return None
        query = query.filter(gender=gender)
    return query
doclisting.html分页

<ul class="pagination nav navbar-nav">
    {% if doctors.has_previous %}
            <li><a href="?page={{ doctors.previous_page_number }}">Prev</a></li>
    {% endif %}
    {% for page in doctors.paginator.page_range %}
        <li class="{% if doctors.number == page  %}active{% endif %}"><a href="?page={{page }}">{{ page }}</a></li>
    {% endfor %}

    {% if doctors.has_next %}
        <li> <a href="?page={{ doctors.next_page_number }}">Next</a></li>
    {% endif %}
 </ul>

问题只存在于下一个/上一个链接的HREF中。您需要确保在此处添加语言/专业/性别参数以及页码

有各种第三方模板过滤器,通过从URL插入当前值来提供帮助。

下一步。 您的html正在呈现一个只有页码的链接。尝试:

<a href="?page={{ doctors.next_page_number }}{% if s_name %}&speciality={{ sname }}{% endif %}">


这应该包括专业名称。如果可行,还可以添加其他变量。

嘿,谢谢你的回答。这只考虑到专业性,但我也想考虑到性别和语言。所以我尝试了这个方法,但是给了我无效的块标记:'endfor',应该是'elif','else'或'endif'错误您缺少了{%endif%}标记。你需要一个如果。
<a href="?page={{ doctors.next_page_number }}{% if s_name %}&speciality={{ sname }}{% endif %}">