Как создать собственный тег фильтра django - PullRequest
1 голос
/ 17 января 2010

У меня проблемы с тем, чтобы мой сайт распознавал собственные теги шаблонов. У меня следующая структура каталогов:

  • project_name
    • project_name
      • templatetags
        • _ __init __ _.py
        • getattribute.py
      • просмотры
        • _ __init __ _.py
        • index.html
      • вид
      • settings.py
      • main.py
      • manage.py
      • urls.py
    • nbproject

Затем я добавил это в INSTALLED_APPS:

INSTALLED_APPS = (
#    'django.contrib.auth',
    'django.contrib.contenttypes',
#    'django.contrib.sessions',
    'django.contrib.sites',
    'project_name'
)

Затем я ссылаюсь на это внутри шаблона следующим образом:

{% load getattribute %}
{%  for header in headers %}
    <td>{{ obj|getattribute:header }}</td>
{% endfor %}

Я получаю следующую ошибку:

Не удалось импортировать controllers.EventController. ошибка был: нет модуля с именем имя_проекта

Любая помощь будет благодарна за это:

ТИА

Andrew

UPDATE:

Сайт работает, но я не могу заставить работать шаблоны тегов. Если я удаляю имя_проекта из установленного приложения, я получаю следующую ошибку:

Значение исключения: 'getattribute' is недопустимая библиотека тегов: не удалось загрузить библиотеку шаблонов из django.templatetags.getattribute, Нет модуль с именем getattribute

Ответы [ 3 ]

2 голосов
/ 17 января 2010

Ошибка в том, что у вас неправильная структура вашей папки, я думаю, что вы должны прочитать документы, это руководство (часть1) объясняет правильную структуру:

У вас есть проект, который отличается от приложения:

  • project_name
    • app_name
      • templatetags
        • getattribute.py
      • models.py
      • views.py
  • settings.py
  • manage.py

А у тебя INSTALLED_APPS:

INSTALLED_APPS = (
#    'django.contrib.auth',
     'django.contrib.contenttypes',
#    'django.contrib.sessions',
     'django.contrib.sites',
     'project_name.app_name',
)

Это все

1 голос
/ 17 января 2010

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

  • не использовать одно и то же имя для содержащей директории (проекта) и внутренней (которая должна быть именем приложения).
  • manage.py и settings.py должны быть на внешнем уровне, а не внутри приложения.
  • Я не знаю, что такое второй views - это действительно views.py?В этом случае он никогда не будет использоваться.
  • Пустые файлы внутри templatetags и views должны быть __init__.py, т.е. два подчеркивания с каждой стороны.
  • Вероятно, истинная причина вашей проблемы: вам нужен файл models.py внутри приложения, даже если он пустой, для того, чтобы Django вообще его загрузил - шаблоны тегов не будут работать без него.
1 голос
/ 17 января 2010

вы уверены, что это конкретно связано с тегом шаблона?

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

Прочтите это, чтобы узнать, как это исправить: http://djangotricks.blogspot.com/2008/09/note-on-python-paths.html

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