Вызов функции Python "DIR" из шаблона django или эквивалент php print_r? - PullRequest
3 голосов
/ 15 января 2012

Кто-нибудь знает о существующей библиотеке для проверки элементов в шаблоне?

В настоящее время я обычно делаю это в виде:

show_me = dir(the_deets_on_this_object)
raise ValueError()

Затем я могу проверить значениеshow_me в трассировке стека отладчика.

Однако это действительно ужасно.Я хотел бы иметь возможность сделать эту проверку в шаблоне, как это делается в php с print_r

{% load development_show_me %}
{{the_deets_on_this_object|show_them_to_me}}

Я знаю, что это не существует в стандартной библиотеке шаблонов django, но я 'Я надеюсь, что кто-то уже написал этот шаблонный фильтр, так что я могу просто с удовольствием его использовать.

Бонусное поведение:

  • Проверяет настройки. Отладка и выдает ошибку, которая не перехватывается, если она ложна
  • переносит вывод в

Я напишу это, если придется, но, надеюсь, кто-то другой уже сделал это.

Ответы [ 3 ]

7 голосов
/ 15 января 2012

В итоге написать функцию было быстрее, чем написать вопрос с вопросом, знает ли кто-нибудь, существует ли она.

<code>#myproject/tempates/templatetags/helper_tags.py
from django.template import Library
from django.conf import settings
register = Library()

@register.simple_tag
def template_dir(this_object, its_name=""):
    if settings.DEBUG:
        output = dir(this_object)
        return "<pre>" + str(its_name) + " " + str(output) + "
"return" "

Использование:

{% load helper_tags %}
{% template_dir field.field "field.field" %}

{% template_dir my_object "I'm looking at my_object" %}
3 голосов
/ 16 января 2012

В Джанго гораздо лучше, чем print_r:

  • в случае сбоя шаблона у вас есть доступ ко всем переменным в шаблоне отладки. Вы можете форсировать это настройками {% url fjkdslmjfdklmfjlsmqk%} Это как супер print_r для всех переменных.

  • вы можете установить django (extensions и werkzeug , таким образом вы можете заменить runserver на runserver_plus и получить ту же страницу, о которой мы говорили, но с интерактивной оболочкой Python, вставленной в каждую строку трассировки стека

  • вы можете установить django_template_repl , что позволит вам запустить отладчик в любом месте шаблона, в форме оболочки Python или оболочки шаблона.

  • вы можете установить django-debug-toolbar , чтобы получить отображение стиля print_r и многое другое в боковой панели JS, невидимой для всех, кроме вас.

0 голосов
/ 16 января 2012

Не уверен, что это то, что вы ищете, но у django есть шаблон фильтра по умолчанию pprint . Похоже, это print_r заменитель.

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