Python 如何在Django中生成大量冗余的ajax元素,如复选框和下拉列表?

Python 如何在Django中生成大量冗余的ajax元素,如复选框和下拉列表?,python,django,templates,forms,list,Python,Django,Templates,Forms,List,我已经从stackoverflow那里得到了很多答案,现在我在Django只是通过搜索。现在我希望我的问题也能为大家创造一些价值 在选择Django时,我希望有一些类似于在ROR中执行partials的机制。这将在两方面帮助我。一种是生成重复的索引表单或表单元素,另一种是在往返过程中仅呈现页面的一部分 我已经通过使用taconite和一个简单的URL点击做了一点,但现在我正在尝试更高级。这将集中于表单问题,它归结为如何在辅助对象上迭代 如果我有一个照片实例列表,每个实例都有两个参数,比如大小和数

我已经从stackoverflow那里得到了很多答案,现在我在Django只是通过搜索。现在我希望我的问题也能为大家创造一些价值

在选择Django时,我希望有一些类似于在ROR中执行partials的机制。这将在两方面帮助我。一种是生成重复的索引表单或表单元素,另一种是在往返过程中仅呈现页面的一部分

我已经通过使用taconite和一个简单的URL点击做了一点,但现在我正在尝试更高级。这将集中于表单问题,它归结为如何在辅助对象上迭代

如果我有一个照片实例列表,每个实例都有两个参数,比如大小和数量。我想分别为每个照片实例生成表单元素。但是我有两个列表,我想同时迭代

背景:

photos : Photo.objects.all()

换句话说,我们有一个照片对象列表和一个基于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 }}
Dimensions: {{ oi.size }} {{ form.size }}
{% endfor %}
{% for photo in photos %}
  {% foo_tag %}
{% endfor %}

{%用于照片中的照片%}
{%include“photoview.html”%}
{%comment%}
因此,这里我想使用photo.id作为索引来获得正确的表单。这样每张照片都有自己的形式。我希望有一个不同的动作,每个表单字段都是唯一的。可能吗?我怎样才能重复这一点?谢谢
这会不会是一个很好的选择?在Python中,当然是form=forms[photo.id],但是这里呢?
{%endcomment%}
数量:{{oi.Quantity}}{{form.Quantity}}}
维度:{{oi.size}}{{form.size}}
{%endfor%}
对于这个简单的案例,我能做些什么。我怎样才能让每个控件都自动更新服务器,而不是使用表单

谢谢


James

我不确定我是否理解您的问题,但以下是我认为您想要的,用伪代码表示:

for photo in photos:
    form = forms[photo.id]
    generate_some_html(photo, form)
实现这一点的最佳方法可能是使用包含标记:。基本上,它是一个依赖于另一个模板的自定义标记,类似于RoR部分。详细信息可以在我提供的链接中找到,但您基本上需要做的是

  • 在一个应用程序目录中创建一个名为“templatetags”的包
  • 在该包中创建一个模块。让我们以foo_tags.py为例
  • 将以下样板添加到foo_tags.py:

    from django import template
    register = template.Library()
    
  • 编写自定义标记,它实现
    生成一些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()
    
  • relative/path/to/some/template.html
    中使用foo_标记返回的上下文

  • {%load foo_tags%}
    添加到父模板。您可能应该将其放在顶部附近,就像将导入放在.py文件顶部附近一样
  • 在父模板中使用新的自定义标记:

    
    {% 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 }}
    Dimensions: {{ oi.size }} {{ form.size }}
    {% endfor %}
    {% for photo in photos %}
      {% foo_tag %}
    {% endfor %}
    

  • Django不支持像RAIL这样的AJAX,但它允许您从一开始就选择要使用的任何库


    通过创建和使用,您可以做您想做的事情。

    您的问题相当令人困惑。起初,我认为您的问题是关于使用Django模板生成HTMl的,因为您提到希望在RoR中使用类似于partials的内容。为此,您可能需要Django的include标记,但看起来您已经知道了。当我讲到最后的时候,您正在谈论在服务器端处理用户输入。也许我错过了你试图建立的联系,但这些是相当明显的问题。你在做什么?哇,好吧,因为我还没有进入定制标签,这将需要一些必要的消化!非常感谢!我期待着与这些概念作斗争。