自定义模板标记无法按预期工作(django)

时间:2017-04-22 17:59:32

标签: python django django-templates

我的自定义模板标记名为change_page,应更改网址中的page=x,而不更改网址中的任何其他内容。 (这意味着在?之前和之后的网址中的任何内容。

这是模板代码部分:(它与标准的django paginator一起使用)

 {% 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

它不起作用。 它总是返回一个空字符串。我错了什么?

1 个答案:

答案 0 :(得分:0)

它不起作用,因为request.GET.urlencode中没有页面参数时我什么也没做。

我在方法的开头添加了这段代码,现在它工作正常,除非它向只有键的参数添加=,并且没有值。

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

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