Как создать множество избыточных элементов Ajax, таких как флажки и раскрывающиеся списки в Django? - PullRequest
0 голосов
/ 17 марта 2010

Я получил много ответов от stackoverflow теперь, когда я в Django, просто выполняя поиск. Теперь я надеюсь, что мой вопрос также создаст некоторую ценность для всех.

При выборе Django я надеялся, что был какой-то механизм, похожий на способ, которым вы можете выполнять партиалы в ROR. Это должно было помочь мне двумя способами. Один из них заключался в создании повторяющихся индексированных форм или элементов форм, а также в рендеринге только части страницы в цикле.

Я немного сделал это, используя таконит с простым кликом по URL, но теперь я пытаюсь получить более продвинутый уровень. Это будет сосредоточено на проблеме формы, которая сводится к тому, как перебирать вторичный объект.

Если у меня есть список экземпляров фотографий, каждый из которых имеет пару параметров, скажем, размер и количество. Я хочу создать элементы формы для каждого экземпляра фотографии отдельно. Но тогда у меня есть два списка, которые я хочу повторить одновременно.

Контекст:

photos : Photo.objects.all()

и

forms = {}
for photo in photos:
  forms[photo.id] = PhotoForm()

Другими словами, у нас есть список фотообъектов и набор форм на основе photo.id.

Вот абстракция шаблона:


{% for photo in photos %}
         {% include "photoview.html" %}
         {% comment %}
    So here I want to use the photo.id as an index to get the correct form.  So that each photo has its own form.  I would want to have a different action and each form field would be unique.  Is that possible?  How can I iterate on that?  Thanks!
Would it be a with?  In Python of course it's form = forms[photo.id] but here?
         {% endcomment %}
         
            Quantity: {{ oi.quantity }} {{ form.quantity }}<br />
            Dimensions: {{ oi.size }} {{ form.size }}<br />
             
              
    {% endfor %} 

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

Спасибо!

Джеймс

Ответы [ 2 ]

0 голосов
/ 22 декабря 2011

Django не поддерживает AJAX, например, RAIL, но позволяет с самого начала выбрать любую библиотеку, которую вы хотите использовать.

Вы можете делать все, что хотите, создав пользовательских виджетов и используя form media .

0 голосов
/ 17 марта 2010

Я не уверен, что понимаю ваш вопрос, но вот то, что, я думаю, вы хотите выразить в псевдокоде:

for photo in photos:
    form = forms[photo.id]
    generate_some_html(photo, form)

Вероятно, лучший способ добиться этого - использовать теги включения: http://docs.djangoproject.com/en/dev/howto/custom-template-tags/#inclusion-tags. По сути, это пользовательский тег, который опирается на другой шаблон, похожий на частичный RoR. Подробности можно найти в ссылке, которую я предоставил, но в основном вам нужно сделать

  1. создайте имена пакетов "templatetags" в одной из директорий вашего приложения
  2. создать модуль в этом пакете. Давайте возьмем foo_tags.py для примера.
  3. Добавьте следующий шаблон к foo_tags.py:

    from django import template
    register = template.Library()
    
  4. Напишите ваш собственный тег, который реализует generate_some_html. Сделайте так, чтобы он учитывал контекст звонящего:

    @register.inclusion_tag('relative/path/to/some/template.html', takes_context=True)
    def foo_tag(context):
        photo = context['photo']  # loop variable in parent template
        form = context['forms'][photo.id]
        # further computation that you need in order to setup the
        # context for relative/path/to/some/template.html can be
        # done here...
        return locals()
    
  5. Использовать контекст, возвращаемый foo_tag в relative/path/to/some/template.html.

  6. Добавить {% load foo_tags %} к родительскому шаблону. Вероятно, вы должны поместить это в верхнюю часть, так же, как вы помещаете импорт в верхнюю часть файла .py.
  7. Используйте ваш новый пользовательский тег в родительском шаблоне:

    {% for photo in photos %}
      {% foo_tag %}
    {% endfor %}
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...