тег шаблона 'url' не работает, если используется external javascript - PullRequest
1 голос
/ 21 марта 2020

Я создаю django программу, используя 'google-map api'.
'mapinit (json -data)' читается из 'map. js'

<body onload="mapinit('{{ data }}')">

    <!-- create a map area with shop information -->
    <div class="wrapper">
        <div id="shopinfomation"></div>
        <div id="map_canvas1" style="width: 500px; height: 500px"></div>
    </div>

    <!-- post action from html is ok! -->
    <h3>category 1</h3>
    <form class="specific_form" action="{% url 'index_search' '1A' %}" method="POST">
        {% csrf_token %}
        <input type="submit" class="btn-flat-border" value="ramen" /> search ramen shops
    </form>

external javascript имеет некоторые действия, такие как ajax, перенаправление.
Прямо сейчас я пишу URL напрямую.

// get a shop detail
$.ajax({
    type: "POST",
    url: "/gmarker/search/detail/" + json.shops[i]['place_id'],
    beforeSend: function(xhr, settings) {
        xhr.setRequestHeader("X-CSRFToken", Cookies.get('csrftoken'));
    }
}).done(function(data){
    shopinfomation.innerHTML = 'ajax success. shop information...';
}).fail(function(){
    shopinfomation.innerHTML = 'ajax error.';
});

Я хочу использовать это.

console.log("{% url 'index_search' '2' %}")

Я хочу.

/gmarker/search/2

, но chrome вывод ... Идет то же самое.

{% url 'index_search' '2' %}
urlpatterns = [
    path('', views.index, name='index'),
    path('search/<str:searchcode>', views.index, name='index_search'),
    path('search/detail/<str:place_id>', views.searchdetail, name='detail_search'),
    path('result/<str:searchcode>', views.index, name='index_result'),
]

external javascript is not read read шаблон тега ??

1 Ответ

0 голосов
/ 21 марта 2020

Да, внешний javascript не может использовать переменные шаблона. Что вам нужно сделать, это отправить данные из внутреннего javascript, как. На моей карте. html

<script>
    var TemplateVar = {
        my_url: "{% url 'index_search' '2' %}"
    }
</script>
<script src="{% static 'js/map.js' %}"></script>

Теперь на карте. js

    my_url = TemplateVar.my_url;      // Taking json attribute from script of mymap.html
    console.log(my_url);              // You should get what you are expecting

Дополнительно: Вы может потребоваться экранирование переменных для предотвращения некоторых атак

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...