#javascript #python #django
#javascript #python #django
Вопрос:
Я пытаюсь заставить JavaScript получать переменную, установленную из контекста администратора Django. Объект ‘original’ уже существует и является объектом модели, который мне нужен. Но мне нужно получить имя объекта в переменной, которую я могу использовать в своем JavaScript.
<script>
var className = "{{ original.__class__.__name__ }}";
</script>
У меня есть встроенный администратор и администратор модели, которые я могу использовать для этого, но класс Media будет принимать только файлы. Что мне нужно, так это способ вставить приведенный выше код в шаблон администратора без переопределения самого шаблона. Переопределение шаблона требует, чтобы я знал, где именно будет находиться мой код, чего я не буду знать, поскольку этот код будет частью пакета.
Есть ли способ динамически обновлять TEMPLATE_DIRS
объект настроек? Если это так, то я мог бы использовать метод шаблона для решения моей проблемы.
Комментарии:
1. Вы пробовали переопределять шаблоны администратора?
Ответ №1:
Один из способов добиться этого — переопределить ваши шаблоны администратора. Теперь для этого вам следует создать Virtualenv и установить в нем python и Django.
После этого вы можете узнать свой путь к django, открыв консоль python с: python
Введите следующее в консоль:
import sys
sys.path = sys.path[1:]
import django
print(django.__path__)
Это выведет путь к вашей установке django. Если вы используете virtualenv, обычно это что-то вроде:
~/myproject/env/lib/pythonX.X/site-packages/django
Итак, шаблоны администратора находятся в :
~/myproject/env/lib/pythonX.X/site-packages/django/contrib/admin/templates/admin
Там вы можете добавить тег script так же, как в обычных шаблонах django.
Обратите внимание, что virtualenv — это просто рекомендация. Вам не обязательно его использовать, но обычно так лучше делать, поскольку это влияет не на весь проект python / django, а только на тот, для которого вы используете env.
Комментарии:
1. Я уже использую виртуальную среду, но ваше решение не будет работать в моем случае, потому что я создаю пакет, а не сайт. В конечном итоге это будет плагин к Django, и я понятия не имею, где конечный пользователь его установит.