2017-04-22 76 views
0

我的自定義模板標記被稱爲change_page,並且應該在網址中更改page=x而不更改網址中的任何其他內容。 (這意味着任何在url中,前後?背後自定義模板標記無法按預期方式工作(django)

這是模板代碼部分:(它與標準的Django分頁程序的工作原理)

{% if page_obj.has_previous %} 
     <a href="{{ request.path }}?{% change_page current=request.GET.urlencode page=page_obj.previous_page_number %}" class="left_sharp">Zurück</a> 
    {% else %} 
     <a tabindex="2" href="" class="noteditable">Zurück</a> 
    {% endif %} 

    <div class="screen_only"> 
    {% for i in paginator.page_range %} 
     {% ifequal page_obj.number i %} 
     <a href="" tabindex="2" class="noteditable">{{ i }}</a> 
     {% else %} 
     <a href="{{ request.path }}?{% change_page current=request.GET.urlencode page=i %}">{{ i }}</a> 
     {% endifequal %} 
    {% endfor %} 
    </div> 

    {% if page_obj.has_next %} 
     <a href="{{ request.path }}?{% change_page current=request.GET.urlencode page=page_obj.next_page_number %}" class="right_sharp">Weiter</a> 
    {% else %} 
     <a href="" tabindex="2" class="noteditable">Weiter</a> 
    {% endif %} 
    </nav> 
    {% endif %} 

模板標籤change_page的代碼:

@register.simple_tag 
def change_page(current="", page=""): 
    args = current.split('&')  
    all='' 

    for arg in args: 
     all += re.sub(r'page=[0-9]+', 'page='+str(page), arg) + '&' 

    all = all[:-1] 

    return all 

這是行不通的。 它八方通返回一個空字符串。我是怎麼了?

+0

嘗試刪除'.urlencode'。實際上,['urlencode'](https://docs.djangoproject.com/en/1.11/ref/templates/builtins/#urlencode)是一個Django內置的模板過濾器。看看它做了什麼。 –

+0

'.urlencode'是對的。 ['request.GET'](https://docs.djangoproject.com/en/1.11/ref/request-response/#django.http.HttpRequest.GET「)返回一個QueryDict,它類似於不可變的字典。 ['request.GET.urlencode'](https://docs.djangoproject.com/en/1.11/ref/request-response/#django.http.QueryDict.urlencode)在問號後返回url部分。 (一個url看起來像這樣:'myurl /?encodedquerydict',看起來像這樣:'example.com/example/directoy/?key = value&extravar'。) – Asqiir

回答

0

它迪沒有工作,因爲我在request.GET.urlencode沒有頁面參數時什麼也沒做。

我在方法的開頭添加了這段代碼,現在它工作正常,除非它將=添加到只有鍵的參數,並且沒有值。

if current == "": 
     return 'page='+str(page) 

    if not re.compile('page=[0-9]+').match(current): 
     return current + '&page=' + str(page) 
相關問題