Джанго - admin_media_prefix доступ из JavaScript - PullRequest
1 голос
/ 27 декабря 2011

В администраторе я бы хотел, чтобы URL-адрес администратора был доступен из любого javascript.
Я уже включил его в контекст запроса.
Но для того, чтобы иметь возможностьполучить доступ к нему из включенного JavaScript,

<script type="text/javascript">
  window.__admin_media_prefix__ = "{{ ADMIN_MEDIA_URL }}";
</script>

Должен ли я поместить что-то подобное в базовый шаблон или есть более чистый способ сделать это?

Ответы [ 2 ]

2 голосов
/ 28 декабря 2011

Медиа (статические) файлы никак не интерпретируются django.На рабочем сайте код Python может даже не иметь доступа к этим файлам, поскольку они, вероятно, обслуживаются веб-сервером внешнего интерфейса.Таким образом, у вас есть сумасшедший вариант: использовать что-то вроде серверных включений (SSI) для встраивания переменного содержимого в выбранные медиа-файлы путем каким-то образом анализа файла конфигурации.

Лучше было бы иметь одинаковую схему префикса мультимедиа администратора для каждого сайта, гибкий файл конфигурации для каждого сайта для выбранного веб-сервера, где файлы мультимедиа администратора будут обслуживаться из некоторого известного места:

location ^~ /media/ {
    root        /.../django-$django_ver/contrib/admin/;
}
1 голос
/ 06 декабря 2012

Я могу предложить несколько «злое» решение: поскольку Django 1.4 django.contrib.admin использует django.contrib.staticfiles для всего статического.Поскольку Admin Admin Javascript использует missing-admin-media-prefix, если он не найден, мы можем сделать перенаправление, например, в Apache:

RewriteRule ^/missing-admin-media-prefix/(.*)$ /static/admin/$1 [L,R=301]

(если STATIC_URL установлен на /static, конечно)

Этот метод особенно полезен, если вы много взламываете вещи в Admin, а также не хотите загромождать ваши шаблоны глобальными объявлениями переменных Javascript.

...