Как мне вставить тег на страницу администратора Django

#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, и я понятия не имею, где конечный пользователь его установит.