Извлечь переменную Mustache для использования в теге шаблона Django

Brian Lee спросил: 12 мая 2018 в 04:03 в: python

Я реализую API поиска Algolia для Django, и у меня есть определенная переменная Mustache {{ObjectID}}, которая соответствует идентификаторам для результатов поиска. Я могу использовать только через {% verbatim %} {{ObjectID}} {% endverbatim %}, не конфликтуя с синтаксисом шаблона Django.

Однако мне также нужна эта переменная для создания URL-адреса для ID, но проблема в том, что я не могу легко передать переменную Mustache в форму, используемую непосредственно с шаблонами Django. В качестве примера просто выполните

{% url "appName:method" {{ObjectID}} %}

конфликты с синтаксисом шаблона Django, но попытаемся выполнить ivnoke verbatim через

{% url "appName:method" {%verbatim %} {{ObjectID}} {% endverbatim %} %}

не работает, так как вызов тега шаблона в теге шаблона запрещен.

Я также не могу сохранить {{ObjectID}} как временную переменную со способом или оффшором url для отдельного метода, например

function generate (objectID){
    return "{% url 'appName:method' objectID %}"
}//usage of method<a href = "generate({% verbatim %}{{ObjectID}} {% endverbatim %})">link</a>

, так как Django обработает url на прицеле и бросит NoReverseMatch, поскольку еще не определен Algolia. Есть ли способ извлечь objectID, чтобы его можно было вернуть обратно в конструктор {{ObjectID}} Django?

ПРИМЕЧАНИЕ. Моя реализация Algolia напрямую не взаимодействует с Базы данных Django, а скорее собственное индексирование базы данных, которую она хранит отдельно. Дополнительная информация о Github url

1 ответ

Есть решение
Adam Taylor ответил: 12 мая 2018 в 01:33

Я бы предложил вам использовать что-то вроде этого в представлении и передать значение шаблону:

reverse('appName:method', args=[1337]).replace('1337', '{{ObjectID}}')

Если вы должны сделать это только в шаблон, и вы можете быть уверены, что часть {{ObjectID}} всегда будет в конце URL-адреса, вы можете сделать это следующим образом:

{% url "appName:method" 1337 as my_url %} <a href="{{ my_url|slice:":-5" }}{% verbatim %}{{ObjectID}}{% endverbatim %}/">...</a>

Обратите внимание, что указанный выше код шаблона предполагает конечную косую черту.

Brian Lee ответил: 13 мая 2018 в 03:12
Каково значение 1137?
Brian Lee ответил: 13 мая 2018 в 03:21
я также передал бы значение, полученное с помощью reverse, в качестве значения в context представления?
Adam Taylor ответил: 13 мая 2018 в 03:13
Просто то, что не будет в другом месте URL-адреса, но все равно соответствует регулярному выражению шаблона URL. Вы можете использовать все, что хотите.
Adam Taylor ответил: 13 мая 2018 в 03:22
Да, вы сделали бы это