Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从Django模板内部发送POST数据';对于循环';_Python_Django_Django Forms_Django Templates_Django Views - Fatal编程技术网

Python 从Django模板内部发送POST数据';对于循环';

Python 从Django模板内部发送POST数据';对于循环';,python,django,django-forms,django-templates,django-views,Python,Django,Django Forms,Django Templates,Django Views,使用此HTML: ... {% for thing in things %} <form method="post"> {% csrf_token %} {{ thing.name }} {{ form.value }} <input type="submit" value="Submit" /> </form>

使用此HTML:

...

    {% for thing in things %}
        <form method="post">
             {% csrf_token %}
             {{ thing.name }}
             {{ form.value }}
             <input type="submit" value="Submit" />
        </form>
    {% endfor %}
...
。。。
{%表示事物中的事物%}
{%csrf_令牌%}
{{thing.name}
{{form.value}}
{%endfor%}
...
我的网站列出了我数据库中的多个“东西”,因此在一个页面上可以生成多个表单。我怎样才能在我的views.py中确定提交了哪个“thing”表单

更多细节:

假设您有一页对象一个接一个地列出,每个对象都有一个与之关联的like按钮,该按钮将like添加到它旁边的对象中。这就是我在这里要做的

问题是,我有一个可以处理like的表单,但是如何将like添加到页面上显示的对象中?(通过上述“for循环”)


我完全不知道该怎么做,我是不是用错误的方式看待这个问题,还是在这个问题上有一个我不知道的标准习语


谢谢:)

模型实例更新最常见的设计模式是在提交post数据的url中提供对象的主键

# urls.py

from django.conf.urls import *
from library.views import UpdateThing

urlpatterns = patterns('',
    url('^update_thing/(?P<pk>[\w-]+)$', UpdateThing.as_view(), name='update_thing'),

# views.py

def my_view(request, pk=None):
    if pk:
        object = thing.objects.get(pk=pk)
    form = MyModelForm(data=request.POST or None, instance=object)

    if form.is_valid():
        ...
#url.py
从django.conf.url导入*
从library.views导入更新
urlpatterns=模式(“”,
url(“^update\u thing/(?P[\w-]+)$”,UpdateThing.as\u view(),name='update\u thing'),
#views.py
定义我的视图(请求,主键=无):
如果主键:
object=thing.objects.get(pk=pk)
form=MyModelForm(data=request.POST或None,instance=object)
如果form.is_有效():
...
现在,让我们指定(使用Django的url模板标记)要将每个对象的post数据提交到正确的url

{% for thing in things %}
    <form method="post" action="{% url 'update_thing' thing.pk %}">
         {% csrf_token %}
         {{ thing.name }}
         {{ form.value }}
         <input type="submit" value="Submit" />
    </form>
{% endfor %}
{%for things in things%}
{%csrf_令牌%}
{{thing.name}
{{form.value}}
{%endfor%}

url
标记通过url反向查找为给定url提供的
name
kwarg,并接受位置参数(例如,在本例中为thing.pk),以及在需要时接受关键字参数。

使用Django在一个页面上处理相同类型的多个表单的标准方法是使用

它处理恼人的细节,如在一个窗体上显示错误,而在其他窗体上保留输入等


但是,在您的特定情况下,这可能有点过头了。如果您只想为对象创建一个like,那么实际上没有任何需要验证的用户输入,因此您并不真正需要表单。只需使用Javascript向指定的URL发送帖子。如果用户弄乱了URL,您将显示404。

不理解您的问题关于。您能详细说明一下吗?所有这些表单周围实际上都有单独的
标记,是吗?为什么要用一个视图处理多个表单?为什么不将表单指向不同的URL/不同的视图?但是,如果您真的需要用一个视图处理多个提交,为什么不包含一个
字段?@dhke是的,对不起,这是一个打字错误!这些表格周围确实有标签。@ArpitSrivastava我正试图弄清楚如何详细说明我的问题。我发现很难解释得更清楚(我肯定这是因为我不理解)谢谢你的精彩回答!这可能是一个愚蠢的问题,但是视图末尾的返回调用是什么?不管你想要什么:)如果我正在构建这个,我会通过AJAX提交“喜欢”的点击,并更新显示的元素,以便在成功响应时显示喜欢/不喜欢的对象。为此,我通常使用[JsonResponse]()作为视图的返回值,并通过客户端的JQuery更新元素。