目前我所拥有的是:
<ul>
{% for object in object_list %}
<li>
<ul>
<li>{{ object.property1}}</li>
<li>{{ object.property2}}</li>
</ul>
</li>
{% endfor %}
</ul>
我想要做的是调用一个方法(可能是{{object.remove}}),当且仅当用户按下删除按钮时。我需要在remove方法中使用对象的一个属性,因此它必须是特定对象的remove()调用。
我知道如何在视图中调用一个函数,因为有很多问题,但我不确定这会有什么帮助?与AJAX调用相同。
答案 0 :(得分:2)
您需要从数据库中获取对象,通常是通过您从URL获取的ID并进行调用。
例如,Post
中有一行url.py
:
urlpatterns = patterns('',
url(r'^(?P<post_id>\d+)/$', views.detail, name='detail'),
url(r'^(?P<post_id>\d+)/remove/$', views.remove, name='remove'),
# ...
)
然后你有views.py
:
from .models import Post
def detail(request, post_id):
try:
post = Post.objects.get(pk=question_id)
except Post.DoesNotExist:
raise Http404("Error 404")
return render(request, 'detail.html', {'post': post})
def remove(request, post_id):
try:
post = Post.objects.get(pk=question_id)
post.remove()
except Post.DoesNotExist:
raise Http404("Error 404")
return render(request, 'confirm.html', {'message': 'Post was removed'})
在您的模板中添加指向remove
视图的链接:
<ul>
{% for post in post_list %}
<li>
<ul>
<li><a href="/{{ post.id }}/remove/">{{ post.id}}</a></li>
<!-- or add AJAX call to this URL -->
</ul>
</li>
{% endfor %}
</ul>
这就是你通常在Django中处理它的方式。
只要post_id只是一个函数参数,您就可以将它用作您自己的存储列表或字典的索引ID。但请确保urls.py
规则中的正则表达式适用于您的需求。在我的示例r'^(?P<post_id>\d+)/remove/$'
中查找整数(因为\d+
规则)。 Django Documentation
答案 1 :(得分:1)
您需要考虑网站的运作方式......
request
对象调用url函数(或视图类的方法)因此,考虑到这一点,很明显,当用户点击网页上的按钮时,与Django交互的唯一方法是浏览器发送新请求。
简而言之,您需要使用AJAX。