Django «не смог разобрать остаток» при вызове связанной модели в шаблоне - PullRequest
0 голосов
/ 01 июля 2018

Когда я пытаюсь вызвать это в моем шаблоне

{% if member.departments.relationship(department).is_manager is True %}

Я получаю это Ошибка

Could not parse the remainder: '(department).is_manager' from 'member.departments.relationship(department).is_manager'

Но тот же вызов работает, когда я отлаживаю свое представление

(Pdb) member.departments.relationship(department).is_manager
True

Вот мой взгляд

def department_detail(request, uid):
  department = Department.nodes.get(uid=uid)
  return render(request, 'department/detail.html', {'department': department,}) 

1 Ответ

0 голосов
/ 01 июля 2018

Для решения этой проблемы я использовал теги-шаблоны. Весело и мощно учиться:

  • Добавлены / templatetags в тот же каталог, что и models.py
  • Добавлены /templatetags/init.py
  • Добавлены /templatetags/department_extras.py

Department_extras.py:

from django import template
from django.utils.safestring import mark_safe


register = template.Library()

@register.filter
def check_is_manager(member, department):
  if member.departments.relationship(department).is_manager is True:
    html_response = """<i class="fa fa-user-tie" title="Manager"></i>"""
  else:
    html_response = ""
  return mark_safe(html_response)

затем в шаблоне:

{% load department_extras %}
{{member|check_is_manager:department}}

Отказ от ответственности : Если бы я использовал стандартный ORM, у меня не было бы этой проблемы, и я использую его только для визуального эффекта, а не для бизнес-логики. Если бы не тот факт, что 3 видам и другим моделям потребуется одинаковая функциональность, я бы передал дополнительный аргумент шаблону.

Мне нравятся теги-шаблоны, потому что они почти похожи на вложенные представления, которые могут выступать в качестве общих знаменателей для представлений, так что вам не нужно постоянно передавать дополнительные данные в аргументах каждого представления.

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