SIMPLE Django按钮执行视图功能

时间:2018-04-24 00:18:45

标签: jquery ajax django variables button

经过几天的教程,我称之为退出,任何帮助将不胜感激。无法实现这一点,我确信它很简单,但这些东西非常复杂。只是尝试使用按钮删除会话变量。我也尝试过Ajax示例。请不要将我转发到另一个帖子,除非你确定它会真正起作用,因为很多人都没有。

URL: urls.py
...
url(r'^$', clear_session, name='clear_session'),
...

View: views.py

def clear_session(request):

    print('hello')

    if not request.POST:

        print('hello')
        del request.session['jobs_append']

        print('session list', request.session['jobs_append'])

Template: index.html

...
<input id="clear_sesh" name="update_log" type="button" value="Update Log"/>
...

<script type="text/javascript">
$(function(){
$("#clear_sesh").click(function(){
    $.post(
     url : "/clear_session/",
     dataType:"html",
     success: function(data, status, xhr){
        //do something with your data
    }
    );
    return false;
});
});
</script>
...

    <!-- jQuery -->
<script src="{% static 'vendor/jquery/jquery.min.js' %}"></script>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>

<!-- Bootstrap Core JavaScript -->
<script src="{% static 'vendor/bootstrap/js/bootstrap.min.js' %}"></script>

<!-- Plugin JavaScript -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-easing/1.3/jquery.easing.min.js"></script>
<script src="{% static 'vendor/scrollreveal/scrollreveal.min.js' %}"></script>
<script src="{% static 'vendor/magnific-popup/jquery.magnific-popup.min.js' %}"></script>

<!-- Theme JavaScript -->
<script src="{% static 'js/creative.min.js' %}"></script>

2 个答案:

答案 0 :(得分:0)

我无法看到视图代码的任何问题,但您的网址代码和您的jQuery调用是不对的,因为您对该视图的网址是空的,这意味着您的视图会被调用第一页(例如127.0.0.1:8000),但您正在调用网址&#34; / clear_session /&#34; (例如127.0.0.1:8000/clear_session/)使用AJAX,总而言之,您永远不会调用您的视图,并且通过扩展代码永远不会被执行。

<强>更新

这是一个可以帮助您制作视图的工作示例。此外,我发现您的AJAX调用存在问题,您应该使用post以外的请求类型,因为您在视图中明确排除了帖子请求。现在的例子:

urls.py

url(r'^clear-session-url/$', clear_session, name='clear_session_name'),
url(r'^update-session-url/$', update_session, name='update_session_name')

views.py

from django.http import JsonResponse

def clear_session(request):
    if not request.POST:
        del request.session['jobs_append']
    return JsonResponse({'jobs_append': request.session.get('jobs_append', None)})


def update_session(request):
    if not request.POST:
        request.session['jobs_append'] = True
    return JsonResponse({'jobs_append': request.session.get('jobs_append', None)})

的index.html

<script type="text/javascript">
    $.get('/update-session-url/', function(data) {console.log(data)});
    $.get('/clear-session-url/', function(data) {console.log(data)});
</script>

我添加了第二个视图,以便于进行简单的测试并同情你应该如何使用你的网址。还为所有参数使用了不同的字符串,以减少您对url函数的混淆。 注意:您将在浏览器的javascript控制台中看到此调用的结果。

答案 1 :(得分:0)

我在没有任何脚本的情况下开始工作:

template: index.html

<input type="button" onclick="window.location.href='clear_session.html'" value="Clear Session">

view: views.py

def clear_sesh(request):

print('SESSION CLEARED')

request.session.pop("jobs_append", None)

return redirect('index')

URL: urls.py

url('clear_session', clear_sesh, name='clear_sesh')

现在它重定向到我想要的地方。您认为我的解决方案存在任何问题吗?我认为理解url模式不能重叠对我有用,所以重定向似乎很金。

另外,我还是新手,我应该测试你的解决方案并将你的答案标记为成功/ upvote吗?