通过点击链接更改布尔字段

时间:2012-04-15 17:53:40

标签: django django-templates

我使用图像来表示布尔字段的状态(如openeye.png,closeeye.png)。如果我单击图像,状态正在更改,页面必须刷新另一个图像。有一些观点使用这个。有一个代码:

模板 - 这可能是moviegrid.html,movielist.html等

{% if movi.seen %}    {# movi.seen is a boolean field #}
    <div id="seen">
        <a href="{% url views.changeseen movi.tmdb_id %}">
             <img src="{{ STATIC_URL }}seen.gif">
        </a>
    </div>
{% else %}
    <div id="seen">
        <a href="{% url views.changeseen movi.tmdb_id %}">
             <img src="{{ STATIC_URL }}not_seen.gif" >
        </a>
    </div>
{% endif %}

views.changeseen

def changeseen(request, id):
    mov=Movi.objects.get(tmdb_id=id)
    mov.seen=not mov.seen
    mov.save()
    return redirect('??????')

问题:如何从changeseen返回父页面?如果有更优雅的方式来改变bool值?

2 个答案:

答案 0 :(得分:0)

如果您想要优雅,可以将changeseen视图称为AJAX GET请求。

答案 1 :(得分:0)

虽然可以使用HTTP引荐来源(在HTTP Referer字段中,可通过req.META['HTTP_REFERER']访问),但无法保证这将被设置甚至有效。我建议您在URL中传递有关当前页面的一些信息,以便进行更改:

{% if movi.seen %}    {# movi.seen is a boolean field #}
<div id="seen">
    <a href="{% url views.changeseen movi.tmdb_id %}?return_to={{ request.get_full_path }}">
    <img src="{{ STATIC_URL }}seen.gif">
    </a>
</div>
{% else %}
<div id="seen">
    <a href="{% url views.changeseen movi.tmdb_id %}?return_to={{ request.get_full_path }}">
    <img src="{{ STATIC_URL }}not_seen.gif" >
    </a>
</div>
{% endif %}

你应该在实际将用户重定向到它之前验证return_to,如果它似乎没有意义(比如重定向到注销URL,甚至是异地),那么你应该只是将它们重定向到默认位置,比如主要电影页面。