【问题标题】:Passing url parameter on django modelform attributes在 django modelform 属性上传递 url 参数
【发布时间】:2021-08-12 09:04:40
【问题描述】:

我需要创建一个包含 5 个选择字段的表单,每个字段都依赖于前一个字段(学校、学科、宏观内容、微观内容、教师)

我只能让一个工作,将 Ajax 视图传递给表单 div:

  <form action="" id="orderForm" method="POST" discipline-queries-url="{% url 'ajax-load-discipline' %}>

和

<script src="//code.jquery.com/jquery-3.6.0.js"></script>
  <script>
    $("#institute").change(function () {
        const url = $("#orderForm").attr("discipline-queries-url");
        const instituteId = $(this).val();

        $.ajax({
            url: url,
            data: {
                'institute_id': instituteId
            },
            success: function (data) { 
                $("#discipline").html(data);
            }
        });

    });
</script>

据我了解,我需要 4 个不同的 ajax 视图,每个数据库查询一个,并通过 modelform 属性传递 url 属性,如下所示:

            'discipline': forms.Select(attrs={'id': 'discipline', 'class': 'form-control',
                                              'discipline-queries-url': '{% url "ajax-load-discipline" %}'}),

但特殊字符正在转义并返回如下内容:

"GET /order/create/%7B%%20url%20%22ajax-load-discipline%22%20%%7D?institute_id=1 HTTP/1.1" 404 13568

所以它正在将 {% url "ajax-load-discipline" %} 传递给 url...

知道我可以做些什么来传递正确的参数吗?

【问题讨论】:

  • 好的,我让它将完整的 URL 直接传递给 ajax javascript: url: 'localhost:8000/ajax/load-discipline-details',但是天哪,这看起来不对。知道如何通过 django templatetags 让它直接工作吗?

标签: javascript python django django-forms


【解决方案1】:

当你为一个小部件设置属性时,它不会像模板的一部分那样被渲染,它被渲染成好像它是模板中正在渲染的一个变量,因此你应该写而不是"{% url 'ajax-load-discipline' %}"网址本身使用reverse_lazy [Django docs]:

from django.urls import reverse_lazy


'discipline': forms.Select(attrs={'id': 'discipline', 'class': 'form-control', 'discipline-queries-url': reverse_lazy('ajax-load-discipline')}),

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-03-22
    • 2021-01-05
    • 2021-10-12
    • 1970-01-01
    • 2023-03-04
    • 2021-09-12
    • 1970-01-01
    相关资源
    最近更新 更多