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
这是行不通的。 它八方通返回一个空字符串。我是怎么了?
尝试删除'.urlencode'。实际上,['urlencode'](https://docs.djangoproject.com/en/1.11/ref/templates/builtins/#urlencode)是一个Django内置的模板过滤器。看看它做了什么。 –
'.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