Поиск ресурсов приложения django - PullRequest
2 голосов
/ 30 августа 2010

tl: dr

Каким образом размещенное в приложении django правильно преобразует пути к ресурсам, чтобы соответствовать любому размещенному местоположению (/ или / test или / testtest)?

Полное описание

Позвольте мне попытаться объяснить, что я пытаюсь сделать.

Я пытаюсь написать несколько пригодное для повторного использования приложение django, которое я намереваюсь использовать из нескольких проектов.Это приложение называется systemstatus.

  • Приложение systemstatus предоставляет страницу в разделе '$ ^', которая предоставляет простой интерфейс для запроса состояния системы.
  • На этой странице выполняется запрос ajax к приложению systemstatus, чтобы определить фактическое состояние системы и сообщить об этом в пользовательском интерфейсе.
  • Приложение systemstatus предоставляет местоположение '^ service / $', которое указывает на обработчик вызовов ajax.
  • Эта страница должна каким-то образом определить правильный URI для обработчика ajax в зависимости от того, где размещено это приложение (например, в / или / status или / blahblah).

Мне интересно, каким был бы идеальный способ сделать это.Я бы сказал, что это относится и к другим ресурсам, связанным внутри приложения (таблицы стилей, изображения).

Сейчас я использую request.path, чтобы определить, каким должен быть целевой путь.Этот путь затем передается в качестве параметра в шаблон.Но этот подход скоро станет слишком громоздким для обработки.


def system_status (request):
    queryPath = request.path + "service/"
    return render_to_response ('systemstatus.html', {'queryPath': queryPath})

Шаблон моей страницы выглядит так:


function do_ajax () {
    $.getJSON ('{{ queryPath }}', function (data) {
        $("#status").html (data.status);
    });
}

Спасибо!

1 Ответ

2 голосов
/ 30 августа 2010

Вы не должны так жестко кодировать свои URL, а вместо этого используйте reverse !

Django также имеет встроенный шаблонный тег для обращения URL-адресов. Таким образом, вы могли бы сделать что-то вроде

function do_ajax () {
    $.getJSON ('{% url path.to.my_ajax_view %}', function (data) {
        $("#status").html (data.status);
    });
}

прямо в вашем шаблоне!

Вы также можете отправить запрос ajax непосредственно на URL вашей текущей страницы и проверить , является ли он запросом ajax или нет:

def my_view(request):
    if request.is_ajax():
        # generate response for your ajax script
    else:
        # generate the response for normal request
        # (render template of your page)
...