Не удалось найти переменную, а именно не удалось найти ключ "VariableDoesNotExist at / genres /" - PullRequest
0 голосов
/ 08 апреля 2020

Я не могу получить объекты в шаблоне, которые связаны с моделью mptt django. Не удалось найти ключевые [жанры]. У меня есть модель, которая связана с другой моделью. Я использую mptt django, чтобы объект был связан через отношения многих ко многим. На административной панели все нормально, но эта проблема возникает при отображении объекта в шаблоне. Что я должен сделать лучше всего? Может быть, я неправильно устанавливаю цикл для объекта?

models.py:

from django.db import models
from django.urls import reverse
from django.utils import timezone
from mptt.models import MPTTModel, TreeForeignKey, TreeManyToManyField


class Genre(MPTTModel):
    name = models.CharField(max_length=50, unique=True, verbose_name='Подкатегория')
    slug = models.SlugField(max_length=200, null=True, blank=True, unique=True, verbose_name='Nazvanie_kategorii')
    parent = TreeForeignKey('self', on_delete=models.CASCADE, null=True, blank=True, related_name='children',
                            verbose_name='Категория')
    is_active = models.BooleanField(default=False, verbose_name='Активность категории')
    created = models.DateField(blank=True, null=True, default=timezone.now, verbose_name='Дата создания записи')
    updated = models.DateField(blank=True, null=True, default=timezone.now, verbose_name='Дата ред-ия записи')

    class MPTTMeta:
        order_insertion_by = ['name']
        verbose_name = 'Тест мптт'
        verbose_name_plural = 'Тест мптт'

    class Meta:
        verbose_name = 'Дерево категорий'
        verbose_name_plural = 'Дерево категорий'

    def __str__(self):
        return '%s' % self.name

    def get_absolute_url(self):
        return reverse('test_mptt:promotion_list_by_category', args=[self.slug])

views.py:

from django.shortcuts import render, get_object_or_404
from .models import Genre, Promotion, PromotionDetails
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger


def show_genres(request, category_slug=None):
    category = None
    categories = Genre.objects.all()
    promotions = Promotion.objects.filter(is_active=True)
    if category_slug:
        category = get_object_or_404(Genre, slug=category_slug)
        promotions = promotions.filter(category=category)
    return render(request, "genre/list.html", {'category': category,
                                               'categories': categories,
                                               'promotions': promotions})

html список шаблонов. html :( Я импортировал {% load mptt_tags%})

<div class="latest_product_inner row">
    {% for promotion in promotions %}
        <div class="col-md-12">
            <div class="offer_post">
                <div class="offer_details">
                    {% if promotion.site %}
                    <a href="{{ promotion.site }}" target="_blank"><h2>{{ promotion.name }}</h2></a>
                    {% else %}
                    <a><h2>{{ promotion.name }}</h2></a>
                    {% endif %}
                    <p>{{promotion.description|truncatechars:220}}</p>
                    <div class="offer_info text-left">
                        <div class="offer_tag">
                            <a class="active" href="#">{{ promotion.category }}</a>
                        </div>
                        <ul class="offer_meta list">
                            <li><a href="/"><i class="lnr lnr-home"></i> Адрес: {{ promotion.country }}, {{ promotion.region }}, {{ promotion.town }}, {{ promotion.address }}</a></li>
                            {% if promotion.schedule_start and promotion.schedule_end %}
                            <li><a><i class="lnr lnr-clock"></i> Часы работы: {{ promotion.schedule_start|time:'H:i' }} - {{ promotion.schedule_end|time:'H:i' }}</a></li>
                            {% else %}
                            <li><a><i class="lnr lnr-calendar-full"></i> Часы работы: круглосуточно </a></li>
                            {% endif %}
                            {% if promotion.phone %}
                            <li><a><i class="lnr lnr-phone"></i> Телеофон: {{ promotion.phone }} </a></li>
                            {% endif %}
                        </ul>
                    </div>
                    <a href="{{ promotion.get_absolute_url }}" class="white_bg_btn">Подробнее</a>
                </div>
            </div>
        </div>
    {% endfor %}
</div>
<aside class="left_widgets cat_widgets">
    <div class="widgets_inner">
        <ul class="list">
            {% recursetree genres %}
                <li>
                    <a href="{{ node.get_absolute_url }}">{{ node.name }}</a>
                    {% if not node.is_leaf_node %}
                        <ul class="list">
                            <li><a href="#">{{ children }}</a></li>
                        </ul>
                    {% endif %}
                </li>
            {% endrecursetree %}
        </ul>
    </div>
</aside>

Журнал ошибок: enter image description here

1 Ответ

2 голосов
/ 08 апреля 2020

Шаблон html содержит следующую строку:

{% recursetree genres %}

Таким образом, шаблон ожидает увидеть переменную с именем genres.

В функции представления у вас есть этот вызов рендеринга :

return render(request, "genre/list.html", {'category': category,
                                           'categories': categories,
                                           'promotions': promotions})

Вы не передаете переменную с именем genres в шаблон.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...