在 Django 模板中动态查找地址

Dynamically address lookup in Django template

提问人:msahin 提问时间:11/13/2023 更新时间:11/13/2023 访问量:30

问:

  • 我在 Django 模板上有一个表单,其中包含 2 个字段:POSTCODE 和 HOUSE_NUMBER。 我在相关视图中有一个 address_find() 方法。
  • 当用户在不提交表单的情况下填写这 2 个字段时,我需要显示完整的地址。(换句话说,当用户输入POSTCODE和HOUSE_NUMBER时,在提交之前,我想用address_find()方法检查地址,并在表单下显示完整的地址)
  • 是否可以在 Django 模板中做到这一点?或者我需要提交表格才能这样做吗? 谢谢。
django django-模板

评论

1赞 willeM_ Van Onsem 11/13/2023
您可能需要一些 JavaScript 来将数据传递给函数,然后呈现结果。但是,如果您显示视图和模板的当前状态,它可能会有所帮助。

答:

0赞 msahin 11/13/2023 #1

我找到了一个解决方案:

首先需要在 Django 视图中添加一个端点:

# views.py
from django.http import JsonResponse

def address_lookup(request):
    postcode = request.GET.get('postcode')
    house_number = request.GET.get('house_number')
    full_address = address_find(postcode, house_number)
    return JsonResponse({'full_address': full_address})

然后需要为新视图创建一个 URL 模式:

# urls.py
from django.urls import path
from .views import address_lookup

urlpatterns = [
    # other patterns
    path('address_lookup/', address_lookup, name='address_lookup'),
]

最后需要编写 JavaScript 来处理表单输入:

<script>
    // Add event listeners to input fields
    document.getElementById('postcode').addEventListener('input', updateAddress);
    document.getElementById('house_number').addEventListener('input', updateAddress);

    function updateAddress() {
        // Get values from input fields
        var postcode = document.getElementById('postcode').value;
        var houseNumber = document.getElementById('house_number').value;

        // Make an Ajax request to the server
        var xhr = new XMLHttpRequest();
        xhr.open('GET', '/address_lookup/?postcode=' + postcode + '&house_number=' + houseNumber, true);
        xhr.onreadystatechange = function () {
            if (xhr.readyState === 4 && xhr.status === 200) {
                // Update the displayed address
                document.getElementById('fullAddress').innerText = JSON.parse(xhr.responseText).full_address;
            }
        };
        xhr.send();
    }
</script>