Разбиение на страницы Django с другими переменными в запросе GET в представлении на основе функций

Я попытался реализовать следующее решение отсюда: Как разбить Django на страницы с другими переменными get?

Я добавил это в свой views.py

from urllib.parse import urlencode
from django import template
register = template.Library()

@register.simple_tag
def url_replace(request, field, value):

    dict_ = request.GET.copy()

    dict_[field] = value

    return dict_.urlencode()

def teacher_list(request, **kwargs):
    paginator = Paginator(results, 1)
    page = request.GET.get('page')

    try:
        results = paginator.page(page)
    except PageNotAnInteger:
        # If page is not an integer, deliver first page.
        results = paginator.page(1)
    except EmptyPage:
        # If page is out of range (e.g. 9999), deliver last page of results.
        results = paginator.page(paginator.num_pages)

template.html

{% if teacher_list.has_next %}
<li><a href="?{% url_replace request 'page' teacher_list.next_page_number %}">Next</a></li>
{% endif %}

Однако это дает мне: Недействительный тег блока в строке 155: 'url_replace', ожидаемый 'elif', 'else' или 'endif'. Вы забыли зарегистрировать или загрузить этот тег?

Еще попробовал загрузить:

@register.simple_tag(takes_context=True)
def url_replace(context, **kwargs):
    query = context['request'].GET.dict()
    query.update(kwargs)
    return urlencode(query)

безуспешно. Я также пробовал:

@register.simple_tag(takes_context=True)
def url_replace(request, **kwargs):
    query = request.GET.dict()
    query.update(kwargs)
    return urlencode(query)

Кажется, ничего из этого не работает.


person Roma    schedule 25.09.2017    source источник
comment
вы загрузили свои теги, добавив нагрузку в шаблон {% load YourTagModuleName %}?   -  person Brown Bear    schedule 25.09.2017
comment
Вы имеете в виду {% load 'simple_tag'%} в template.html?   -  person Roma    schedule 25.09.2017


Ответы (1)


Django не смог загрузить ваш тег

by docs custom-template-tags

вам нужно добавить templatetags (измените your_app и your_tags на ваши допустимые значения):

your_app/
    __init__.py
    models.py
    templatetags/
        __init__.py
        your_tags.py

в шаблоне загрузите свои теги

{% load your_tags %}
person Brown Bear    schedule 25.09.2017
comment
Большое спасибо! Это работает. Надеюсь, такой способ использования GET-запросов не повлечет за собой последствий для безопасности. Также мне было интересно, предлагаете ли вы консультационные услуги? - person Roma; 25.09.2017
comment
рада Вам помочь! Я не уверен в безопасности, в любом случае я думаю, что лучше использовать некоторое сопоставление доступных параметров get. о консалтинге: на мой взгляд ТАК более лучшее решение) - person Brown Bear; 25.09.2017
comment
Да, SO - это здорово, но в проектах есть некоторые моменты, выходящие за рамки, которые я могу изучить в ближайшее время, и меня беспокоит оптимизация кода. Я также хотел бы запустить проекты, и мне бы хотелось, чтобы кто-нибудь из руководителей просмотрел и улучшил мой код. Если вы работаете фрилансером, я с радостью оплатил бы ваши услуги. - person Roma; 25.09.2017
comment
извините за долгое время ответа, но сейчас я работаю над тяжелым проектом, и ТАК, это место, где я могу немного расслабиться. - person Brown Bear; 25.09.2017
comment
О, нет проблем :) - person Roma; 25.09.2017