Django 2.1 - JavaScript customizations in the admin

व्यवस्थापक में जावास्क्रिप्ट अनुकूलन




django

व्यवस्थापक में जावास्क्रिप्ट अनुकूलन

इनलाइन फॉर्म ईवेंट

जब कोई इनलाइन फ़ॉर्म जोड़ा जाता है या व्यवस्थापक परिवर्तन फ़ॉर्म में हटा दिया जाता है, तो आप कुछ जावास्क्रिप्ट को निष्पादित करना चाह सकते हैं। formset:added और formset:removed jQuery ईवेंट इसकी अनुमति देते हैं। इवेंट हैंडलर को तीन तर्क दिए गए हैं:

  • event jQuery इवेंट है।
  • $row नई जोड़ी गई (या निकाली गई) पंक्ति है।
  • formsetName वह formsetName है जो पंक्ति से संबंधित है।

घटना को django.jQuery नाम स्थान का उपयोग करके निकाल दिया जाता है।

अपने कस्टम change_form.html टेम्पलेट में, admin_change_form_document_ready ब्लॉक का विस्तार करें और ईवेंट श्रोता कोड जोड़ें:

{% extends 'admin/change_form.html' %}
{% load static %}

{% block admin_change_form_document_ready %}
{{ block.super }}
<script type="text/javascript" src="{% static 'app/formset_handlers.js' %}"></script>
{% endblock %}
(function($) {
    $(document).on('formset:added', function(event, $row, formsetName) {
        if (formsetName == 'author_set') {
            // Do something
        }
    });

    $(document).on('formset:removed', function(event, $row, formsetName) {
        // Row removed
    });
})(django.jQuery);

ध्यान रखने के लिए दो बिंदु:

  • यदि आप admin/change_form.html को विरासत में दे रहे हैं तो जावास्क्रिप्ट कोड को एक टेम्प्लेट ब्लॉक में जाना चाहिए या इसे अंतिम HTML में रेंडर नहीं किया जाएगा।
  • {{ block.super }} जोड़ा जाता है क्योंकि Django के admin_change_form_document_ready ब्लॉक में परिवर्तन के रूप में विभिन्न कार्यों को संभालने के लिए जावास्क्रिप्ट कोड होता है और हमें इसकी भी आवश्यकता होती है।

कभी-कभी आपको jQuery प्लगइन्स के साथ काम करना होगा जो django.jQuery नामस्थान में पंजीकृत नहीं हैं। ऐसा करने के लिए, बस घटनाओं के लिए कोड कैसे सुनता है इसे बदलें। श्रोता को django.jQuery नामस्थान में लपेटने के बजाय, बस वहां से शुरू हुई घटना को सुनें। उदाहरण के लिए:

{% extends 'admin/change_form.html' %}
{% load static %}

{% block admin_change_form_document_ready %}
{{ block.super }}
<script type="text/javascript" src="{% static 'app/unregistered_handlers.js' %}"></script>
{% endblock %}
django.jQuery(document).on('formset:added', function(event, $row, formsetName) {
    // Row added
});

django.jQuery(document).on('formset:removed', function(event, $row, formsetName) {
    // Row removed
});