【问题标题】:SIMPLE Django button to execute view functionSIMPLE Django 按钮执行视图功能
【发布时间】:2018-10-04 02:58:50
【问题描述】:

经过几天的教程我称之为退出,任何帮助将不胜感激。不能让它工作,我敢肯定这很容易,但这些东西非常复杂。只是想用一个按钮删除一个会话变量。我也尝试了 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>

【问题讨论】:

  • 您的 ajax 网址不正确。换一个/

标签: jquery ajax django variables button


【解决方案1】:

我看不出视图代码有任何问题,但是您的 url 代码和 jQuery 调用不正确,因为该视图的 url 是空的,这意味着在您的第一页中调用了该视图(例如.127.0.0.1:8000),但是您正在使用 AJAX 调用 url“/clear_session/”(例如127.0.0.1:8000/clear_session/),总而言之,您永远不会调用您的视图,并且通过扩展您的代码永远不会被执行。

更新

这是一个可以帮助您提出观点的工作示例。此外,我发现您的 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 控制台中看到此调用的结果。

【讨论】:

  • 好的,我明白了,但我想留在同一页面上,没有新的 URL。 name='clear_session'不是url的名字吗?
  • 页面重新加载和查看网址无关。如果您使用 AJAX 调用删除会话密钥的视图并在 HTML 按钮中使用 type="button",则不会重新加载您的页面。因此,要解决您的问题,您只需将您的网址更改为 url(r'^clear_session/$', clear_session, name='clear_session')
  • 关于您的其他问题,url 的名称只是 Django 用来将名称反转为 url 的标识符。
  • 这并不能解决问题,但我会继续努力。我仍然对 URL 模式中的第一项和第三项感到困惑。我的程序中的其他表单/视图使用r'^$' 作为我的 URL...我没有收到错误 onClick,我只是没有收到来自服务器的响应,并且我的会话变量保持原样。
  • ajax 调用你的视图吗?
【解决方案2】:

我在没有任何脚本的情况下让它工作:

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 模式不能重叠对我很有用,所以重定向看起来很不错。

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

【讨论】:

    猜你喜欢
    • 2021-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多