【问题标题】:Ajax Call in DjangoDjango中的Ajax调用
【发布时间】:2015-04-21 08:26:34
【问题描述】:

我正在使用 Django。我为删除按钮创建了一个功能。它工作正常,但问题是:有一个模板在两个地方共享(一个用于 url:/employer/job/edit,另一个用于vendor/job/edit)模板对于两者都是相同的。我的代码如下,适用于/employer/job/edit,但不适用于vendor/job/edit。 按钮代码是:

<a style="cursor:pointer;" class="delete"
   data-pk="{{ i.id }}" data-appname="employer" data-modelname="office">
    <i class="fa fa-times font-18 iconcolor pt3 float-r" ></i>
</a>

JQUERY 是:

 $('.delete').click(function() {
     appname = $(this).data('appname');
     modelname = $(this).data('modelname');
     pk = $(this).data('pk');
     delete_this = $(this);
     $.ajax({
        url: "/delete_button/" + appname + "/" + modelname + "/" + pk + "/",
        type: "DELETE",
        success: function() {
            // Remove the HTML Element which represents you data
            delete_this.parent().parent().parent().parent().remove();

             $('#'+pk).remove();
             location.reload(true);
        }
    });
 });

我在 view.py 中写的函数是:

def delete_data(request, app_name, model_name, pk):
    try:
        model_name = get_model(app_name, model_name)
        if request.method=='DELETE':
            model_name.objects.get(id=pk).delete()
            return HttpResponse('deleted', status=200)
    except Exception, e:
        return HttpResponse('error', status=500)

怎么了,我在做。请帮帮我!

【问题讨论】:

  • 在我使用 pk=i.id 时,有什么方法可以在按钮代码中获取 app-name 和 module-name 吗?我认为如果有这样的方法,那么问题可以解决。
  • 我在这里有点困惑。您在两个模板中使用相同的按钮吗?
  • 是的.. 确切地说,实际上模板是相同的,两者都是共享的。 @AmalSurendran
  • 那么按钮中的应用名称保持不变对吗?我想价值应该是雇主才能使代码正常工作。
  • 是的。值是雇主,它与 url 一起工作正常:雇主/工作/编辑,但它不适用于 vendor.job/edit。 @AmalSurendran

标签: jquery python ajax django


【解决方案1】:

回复第一条评论中提出的问题,如果您有

  • django.template.context_processors.request 在 Django >= 1.8
  • django.core.context_processors.request 在 Django

上下文预处理器添加到您的TEMPLATE_CONTEXT_PROCESSORS 设置,然后您可以通过{{ request.resolver_match.app_name }} 访问模板中当前应用程序的名称。

您可以通过上下文提供model_name,如果您不使用TEMPLATE_CONTEXT_PROCESSORS,您也可以在那里硬编码应用程序名称。

views.py

# other view code ...
c = Context({
    # possibly other context variables
    'current_app': 'employer',
    'model_name': 'office'
})

return render(request, 'my/template.html', c)

这样你的链接标记看起来像这样

<a ... data-appname="{{ request.resolver_match.app_name }}" 
       data-modelname="{{ model_name }}">...</a>

或使用硬编码的应用名称时:

<a ... data-appname="{{ current_app }}" 
       data-modelname="{{ model_name }}">...</a>

就像一个明显的说明,小心使用这种代码,并确保这些视图在它们允许的参数、请求的足够用户权限和它们将要使用的模型实例方面受到保护可以删除。

【讨论】:

    猜你喜欢
    • 2012-01-30
    • 1970-01-01
    • 1970-01-01
    • 2017-04-29
    • 2015-03-06
    • 2011-03-09
    • 1970-01-01
    • 1970-01-01
    • 2021-10-21
    相关资源
    最近更新 更多