Как установить переменную внутри для цикла внутри шаблона в Django2.1? - PullRequest
1 голос
/ 10 октября 2019

У меня есть контекстный словарь, содержащий данные для передачи в шаблон. Мне нужно переключить два деления на основе некоторой переменной флага, которую я реализовал с помощью тега шаблона {% with %} Django. Однако, когда я пытаюсь установить переменную, используя синтаксис {% set %}, я получаю следующую ошибку: - set', expected 'endwith'. Did you forget to register or load this tag?

Я следую решению, указанному здесь , но это дает мне ошибку.

index.html

{% with flag=1 %}
                {% for benefit in content.benefits %}
                    <div style="background-color: #fff;" class="row mt-5">
                        {% if not flag %}
                            <div class="col-lg-4 col-md-4 col-sm-12">
                                <img src="{% static "{{benefit.image}}" %}" alt="tablet"
                                     class="img-responsive mx-auto mt-5 w-100 h-75 h-md-50 working-img">
                            </div>
                        {% endif %}
                        <div class="col-lg-8 col-md-8 col-sm-12 h-100">
                            {% for desc in benefit.heading %}
                                <div class="d-flex h-25 w-100 m-1 mt-4">
                                    <div class="col-3 col-sm-2 h-100">
                                        <div class="mx-auto">
                                            <i class="fas fa-check fa-2x" style="color: #6fe33d"></i>
                                        </div>
                                    </div>
                                    <div class="col-9 col-sm-10">
                                        <div class="d-flex flex-column">
                                            <div class="working-caption font-weight-bold">{{ desc }}</div>
                                            {#                                            <div class="py-2 working-description-courses text-muted">{{ description }}</div>#}
                                        </div>
                                    </div>
                                </div>
                            {% endfor %}
                        </div>
                        {% if flag %}
                            <div class="col-lg-4 col-md-4 col-sm-12">
                                <img src="{% static "{{benefit.image}}" %}" alt="tablet"
                                     class="img-responsive mx-auto mt-5 w-100 h-75 h-md-50 working-img">
                            </div>
                        {% endif %}
                    </div>
                {% endfor %}
                {% set flag=1-flag %}
            {% endwith %}

settings.py

...
TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.jinja2.Jinja2',
        'DIRS': [],
        'APP_DIRS': True,
        'OPTIONS': {
            'environment': 'myapp.jinja2.environment'
        },
    },
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [],
        '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',
            ],
        },
    },
]
...

1 Ответ

1 голос
/ 10 октября 2019

Команда, которую вы пытаетесь использовать, set, доступна только с механизмом шаблонов Jinja2, но не с механизмом шаблонов Django.

https://jinja.palletsprojects.com/en/2.10.x/templates/#assignments

Поскольку вы используетеСоглашение APP_DIRS в шаблонизаторах Jinja2 и Django в ваших настройках, вам нужно поместить любые шаблоны Jinja2 в courses/jinja2/courses/index.html вместо courses/template/courses/index.html. Подробности смотрите здесь:

https://docs.djangoproject.com/en/2.2/topics/templates/#django.template.backends.jinja2.Jinja2

Удачи!

...