шаблон django styntex {% if p.category == "help"%} {% endif%} не работает - PullRequest
1 голос
/ 18 мая 2019

В результате выполнения кода ниже

{{p.category}} <!-- help -->
{% if p.category == "help" %}
    <button type="button" class="btn btn btn-outline-danger btn-sm" style="color:blue;">
        <a href="{% url "todo:todo_help" p.pk %}" >help 11</a>
    </button>
{% else %}
    <button type="button" class="btn btn btn-outline-danger btn-sm">
        <a href="{% url "todo:todo_help" p.pk %}" >help 22 </a>
    </button>
{% endif %}

Я ожидал, что будет выведена кнопка help11.

Причина в том, что {{p.category} - это "помощь"

Но кнопка вывода была help22.

Я не знаю, почему это не работает

Эта логика сравнения неверна?

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

вид

class TodoList(LoginRequiredMixin,ListView):
    model = Todo
    paginate_by = 20

    def get_queryset(self):
        if self.request.user.is_anonymous:
            return Todo.objects.all().order_by('-created')
        else:
            return Todo.objects.filter(Q(author=self.request.user) & Q(elapsed_time__isnull=True)).order_by('-created')

    def get_context_data(self, *, object_list=None, **kwargs):
        context = super(TodoList, self).get_context_data(**kwargs)
        context['comment_form'] = CommentForm()
        context['category_list'] = Category.objects.all()
        context['todos_without_category'] = Todo.objects.filter(category=None).count()

        context['todo_count_uncomplete'] = Todo.objects.filter(Q(author=self.request.user) & Q(elapsed_time__isnull=True)).count()
        context['todo_count_complete'] = Todo.objects.filter(Q(author=self.request.user) & Q(elapsed_time__isnull=False)).count()

        context['total_todo_count_uncomplete'] = Todo.objects.filter(Q(elapsed_time__isnull=True)).count()
        context['total_todo_count_complete'] = Todo.objects.filter(Q(elapsed_time__isnull=False)).count()

        return context

снимок экрана enter image description here

models.py (поле категории)

    category = models.ForeignKey(Category, blank=True, null=True, on_delete=models.SET_NULL)

категория модели

class Category(models.Model):
    name = models.CharField(max_length=25, unique=True)
    description = models.TextField(blank=True)
    slug = models.SlugField(unique=True, allow_unicode=True)

    def __str__(self):
        return self.name
    class Meta:
        verbose_name_plural = 'categories'
    def get_absolute_url(self):
        return '/todo/category/{}/'.format(self.slug)

1 Ответ

4 голосов
/ 18 мая 2019

Если вы проверите:

<s>{% if p.category == "help" %}</s>

, затем вы проверяете, является ли .category из p строкой "help". Но .category является Category объектом, не строкой. A Category с именем "help" отличается от "help". Однако текстовое представление 1015 * (реализовано с помощью __str__) равно "help", поэтому {{ p.category }} действительно даст "help".

Вам необходимо проверить с помощью .name категории здесь, например:

{% if <b>p.category.name</b> == "help" %}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...