点击Django&Template模板中的对象方法

时间:2015-01-27 21:33:28

标签: python django

目前我所拥有的是:

<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调用相同。

2 个答案:

答案 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)

您需要考虑网站的运作方式......

  1. 浏览器向您的网络服务器发送请求以获取特定网址
  2. 您的网络服务器将请求详细信息传递给您的Django应用程序
  3. Django在您的urlconf中查找与该网址相匹配的视图
  4. Django使用request对象调用url函数(或视图类的方法)
  5. 视图代码呈现模板,生成HTML
  6. 字符串
  7. Web服务器将HTML发送回用户的浏览器
  8. 因此,考虑到这一点,很明显,当用户点击网页上的按钮时,与Django交互的唯一方法是浏览器发送新请求。

    简而言之,您需要使用AJAX。