2015-02-10 52 views
0

我有一个下拉菜单,可以筛选医生专长并显示选定专科的医生。 Doclisting是显示医生名单的观点。如果人们没有从下拉菜单中选择任何东西,只需到/doclistings/?selection=Choose+a+Speciality...&submit=这个URL并显示所有的医生。如果我点击第2页等/doclistings/?page=2动态URL的Django分页

当人们选择专业化,例如牙医/doclistings/?speciality=Dentist&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> 

网址

视图
url(r'^doclistings/$', views.doclistings, name='doclistings'), 

回答

1

下一步。 你的html只渲染一个只有页码的链接。尝试:

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

这应该包括专业名称。如果该作品也添加其他变量。

1

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

有各种第三方模板过滤器可以帮助插入URL中的当前值。