Невозможно загрузить теги пользовательского шаблона в django

templatetags : myapp_extras.py

from django import template

register = template.Library()

@register.simple_tag
def my_url(value,field_name,urlencode=None):
    url = '?{}={}'.format(field_name,value)
    if urlencode:
        querystring = urlencode.split('&')
        filtered_querystring = filter(lambda p:p.split('=')[0]!=field_name,querystring)
        encoded_querystring = '&'.join(filtered_querystring)
        url = '{}&{}'.format(url,encoded_querystring)

    return url

home.html 

{% load myapp_extras %}
.
.
.
<div class="pagination">
    <span class="step-links">
        {% if page_obj.has_previous %}
            <a href="{% my_url 1 'page' request.GET.urlencode%}">&laquo; first</a>
            <a href="{% my_url page_obj.previous_page_number 'page' request.GET.urlencode%}">previous</a>
        {% endif %}

        <span class="current">
            Page {{ page_obj.number }} of {{ page_obj.paginator.num_pages }}.
        </span>

        {% if page_obj.has_next %}
            <a href="{% my_url page_obj.next_page_number 'page' request.GET.urlencode%}">next</a>
            <a href="{% my_url page_obj.paginator.num_pages 'page' request.GET.urlencode%}">last &raquo;</a>
        {% endif %}
    </span>
</div>

settings.py
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'facligoapp'
]

views.py
def do_paginator(get_records_by_date,request):

    paginator = Paginator(get_records_by_date,10)
    page_number = request.GET.get('page', 1)
    try:
        page_obj  = paginator.get_page(page_number)
    except PageNotAnInteger:
        page_obj = paginator.page(1)
    except EmptyPage:
        page_obj = paginator.page(paginator.num_pages)
    return page_obj
:
:
        if new_records_check_box_status is None and error_records_check_box_status is None:
            get_records_by_date = Scrapper.objects.filter(start_time__date__range=(f_date, t_date))
            get_records_by_date = check_drop_down_status(get_records_by_date,drop_down_status)
            get_records_by_date = do_paginator(get_records_by_date,request)

На основе моих тегов шаблонов, когда я фильтрую данные, url должен меняться. Но url не меняется и теги шаблонов не работают. Я создал init.py также в тегах шаблонов. Есть ли какое-нибудь решение, чтобы изменить структуру url, как это делают теги шаблонов. При переходе на следующую страницу url не меняется.

если вы создаете новый файл templatetag, вам нужно перезапустить сервер, чтобы он был обнаружен.

вместо этого:

@register.simple_tag

попробуйте это:

@register.filter

И загрузить его в шаблон:

{% load filter_tags %}

Примечание: вы должны создать пустой файл init.py в каталоге templatetags.

После внесения вышеуказанных изменений необходимо добавить этот тег в файл settings.py:

В файле settings.py:

'libraries':{
                'filter_tags': 'templatetags.filter',
            }

Если каталог templatetags находится внутри приложения, то вы должны добавить имя этого приложения в библиотеки.

 'libraries':{
                    'filter_tags': 'your_appanme.templatetags.filter',
                }

EX:

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR, 'templates')],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
            'libraries':{
                'filter_tags': 'templatetags.filter', #added here
            }
        },
    },
]
Вернуться на верх