Python 从Django模板内部发送POST数据';对于循环';
使用此HTML: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>
...
{% 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更新元素。