Динамически отображать значения полей в шаблоне Django (object.x) - PullRequest
1 голос
/ 12 ноября 2009

В настоящее время я работаю над приложением, которое использует пользовательские аннотированные наборы запросов. В настоящее время у меня настроено 2 URL-адреса, но мне потребуется один для каждого поля, для которого пользователи хотели бы обобщить данные. Это можно настроить вручную, но это нарушит СУХОЙ! Я бы в основном имел + -8 URL, которые в основном делают то же самое.

Итак, вот что я сделал,

  1. У меня есть созданный пользовательский менеджер моделей
  2. У меня есть представление
  3. У меня настроены URL-адреса

Все вышеперечисленные работы.

Таким образом, в основном конфигурация URL передает представлению имя поля для аннотирования (группировать по для людей SQL), представление выполняет некоторую дополнительную обработку и запускает менеджер пользовательских моделей на основе переданного ему поля.

URL выглядит следующим образом:

url('^(?P<field>[\w-]+)/(?P<year>\d{4})/(?P<month>\d+)/(?P<day>\d+)/$','by_subtype', name='chart_link'),

Поле - это столбец в db, который используется, когда фактически выполняется набор запросов. Это передается из вида, мой пользовательский менеджер. Ниже приведен пример кода от менеджера:

return self.filter(start_date_time__year=year).filter(start_date_time__month=month).filter(start_date_time__day=day).values(field).annotate(Count(field))

Кроме того, я передаю значение field в качестве переменной контекста. Это используется для динамического построения ссылок. Однако на самом деле проблема заключается в циклическом просмотре набора запросов и отображении данных.

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

{% for object in object_list %}
{{ object.sub_type }} : {{ object.sub_type__count|intcomma }}
{% endfor %}

В основном вам нужно жестко закодировать поле для diplay (т.е. object.x), есть ли способ динамически назначить это? т.е. если поле = бизнес тогда в шаблоне он должен автоматически обработаться:

{{ object.business }}

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

Вы можете найти код на github, часть шаблона теперь работает с использованием этого фрагмента: http://www.djangosnippets.org/snippets/1412/ Так что, если вы столкнетесь с этим позже и захотите сделать что-то подобное, взгляните на фрагмент кода на github. , : http://gist.github.com/233262

1 Ответ

1 голос
/ 13 ноября 2009

Звучит так, будто вы хотите сделать что-то вроде:

# in the views.py:
field = 'business'


{# in the template: #}
{{ object.field }}

и имеют значение object.business появляются на выходе. Это невозможно с языком шаблонов Django из коробки.

Существуют фрагменты, определяющие фильтры шаблонов, которые можно использовать для достижения этой цели: http://www.djangosnippets.org/snippets/1412/

...