Django reverse() for JavaScript

前端 未结 9 1028
情深已故
情深已故 2020-12-24 07:24

In my project I have a lot of Ajax methods, with external client-side scripts (I don\'t want to include JavaScript into templates!) and changing URLs is kind of pain for me

相关标签:
9条回答
  • 2020-12-24 07:44

    What's wrong with putting JavaScript in your templates?

    You often want to call an initialisation function in your HTML template anyway, so why not pass it an object containing URLs you'll be using?

    <script>
    MYGLOBAL.mymodule.init({
        fancy_ajax_url: '{% url fancy %}',
        fancier_ajax_url: '{% url fancier %}'
    });
    </script>
    

    If you find yourself passing a lot of variable this way, or wanting to use logic in your JavaScript that you do in your HTML templates, then why not render your script through Django's templating engine? Remember, Django templates are not just for HTML documents - often it helps to use templates for plain text, XML, JSON, and yes even JavaScript. Worried about performance? Then cache the result.

    0 讨论(0)
  • 2020-12-24 07:46

    What I usually do is put the URL in either an <input type="hidden" /> element, or in the rel="" attribute.

    Then, when writing the JS (using jQuery below) I do:

    $('div#show_more').click(function () {
        var url = $(this).attr('rel');
        // or
        var url = $('#more_url').val();
    
        $.get(url, function () { /* ... */ });
    });
    

    Nonstandard attributes are well supported by all major browsers and hidden elements don't have to be in forms.

    0 讨论(0)
  • 2020-12-24 07:47

    https://github.com/mlouro/django-js-utils

    dutils is a small utility library that aims to provide JavaScript/Django developers with a few utilities that will help the development of RIA on top of a Django Backend.

    It currently supports the following features:

    • Reverse method for generating Django urls...
    0 讨论(0)
  • 2020-12-24 07:47

    We created a small app called django-js-reverse for this purpose.

    For example you can retrieve a named url

    urls.py:

    url(r'^/betterliving/(?P[-\w]+)/(?P\d+)/$', 'get_house', name='betterliving_get_house'),

    in javascript like:

    Urls.betterliving_get_house('house', 12)

    result:

    /betterliving/house/12/

    0 讨论(0)
  • 2020-12-24 07:49

    Try creating javascript helper functions (in django template) for generating url string. In simple form they could look like this:

    function generete_some_url(id){
        return "{% url some_url itemid=112233 %}".replace("112233", id);
    }
    

    Maybe this has some other implications but I think it should work.

    0 讨论(0)
  • 2020-12-24 07:51

    I have found this cool django app called Django JS reverse

    https://github.com/ierror/django-js-reverse

    If you have a url like

    url(r'^/betterliving/(?P<category_slug>[-\w]+)/(?P<entry_pk>\d+)/$', 'get_house', name='betterliving_get_house'),
    

    Then you do

    Urls.betterliving_get_house('house', 12)
    

    The result is

    /betterliving/house/12/
    
    0 讨论(0)
提交回复
热议问题