Django AJAX 增加

1 投票
1 回答
820 浏览
提问于 2025-04-16 15:28

我想在Django里创建一个按钮或者链接,点击后能让一个模型的整数字段加一,但到现在为止我一直搞不明白。 我知道这个过程需要用到AJAX技术。我试着使用了Dajaxice

但遇到了很多麻烦。

请问现在推荐的做法是什么呢?谢谢!

目前我只是按照Dajaxice的教程在做。

这是我的base.html文件:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML Transitional//EN"

"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> {% load dajaxice_templatetags %}

我的博客 {% dajaxice_js_import %}

    <script type="text/javascript">
        function my_js_callback(data){
            if(data==Dajaxice.EXCEPTION){
                alert('Error! Something happens!');
            } else {
                alert(data.message);
            }
        }
    </script>
</head>
<body>
    <h1><a href=””>My Blog</a></h1>
    {% block content %}{% endblock %}
</body>

在那个内容块里,我有这段代码 <a href="" onclick="Dajaxice.example.myexample(my_js_callback);">点击我!</a>

这段代码 {% dajaxice_js_import %} 会生成 <script src="/dajaxice/dajaxice.core.js" type="text/javascript" charset="utf-8"></script>,这其实就是 http://localhost:8000/dajaxice/dajaxice.core.js

目前的问题是找不到这个文件,但我已经把它放在了/templates/dajaxice/目录下。

我不知道该怎么办。谢谢!

编辑:提到静态文件后

看起来我没有正确放置我的静态文件。我按照Django文档关于如何提供静态文件的说明来做的。

请告诉我我这样做是否正确。我在"myProject/static"下创建了一个"static"文件夹,并把我的JS文件放在static/里。例如"myProject/static/prototype.js"

我还在设置里有 STATIC_URL='static''django.contrib.staticfiles', 在INSTALLED_APPS里。

现在我尝试用 <script type="text/javascript" src="{{ STATIC_URL }}prototype.js"/> 来引入prototype.js,但还是不行...

我现在做错了什么呢?谢谢!

*编辑:*看起来/static/应该放在应用文件夹里。真让人困惑...

1 个回答

2

记得要原子性地进行操作:

# models.py
class Page(models.Model):
    hits = models.PositiveIntegerField()

# views.py
def hit(request, page_pk):
    Page.objects.filter(pk=page_pk).update(hits=F('hits')+1)
    return HttpResponse()

…或者使用事务:

# views.py
from django.db.decorators import commit_on_success

@commit_on_success
def hit(request, page_pk):
    page = Page.objects.filter(pk=page_pk)
    page.hits += 1
    page.save()
    return HttpResponse()

撰写回答