Основная проблема MVT в Django

Во-первых, вам нужно связать функцию SOAPRequest Самый простой способ сделать это - сделать ее функцией стрелки

SOAPRequest = () => {

Затем вы можете остановить this от потери, назначив ее переменная внутри вашей функции.

SOAPRequest = () => {
    const that = this; // assign this to the variable that
    var xmlhttp = new XMLHttpRequest();
    xmlhttp.open("POST", this.url, true);

    // build SOAP request
    var sr =
      "<soapenv:Envelope>" +
      "<soapenv:Header/>" +
      "<soapenv:Body>" +
      "<ns:InquiryRequest>" +
      "</ns:InquiryRequest>" +
      "</soapenv:Body>" +
      "</soapenv:Envelope>";

    xmlhttp.onreadystatechange = function() {
      if (xmlhttp.readyState == 4) {
        if (xmlhttp.status == 200) {
          console.log("success", xmlhttp.responseText);

          console.log("--------------------------------------");
          console.log(that.state);    // use that instead of this

        }
      }
    };

    // Send the POST request
    xmlhttp.setRequestHeader("Content-Type", "text/xml");
    xmlhttp.send(sr);
};
6
задан Yuval Adam 24 April 2009 в 14:46
поделиться

3 ответа

Вы хотите использовать context_instance и RequestContext s.

Сначала добавьте в начало вашего views.py :

from django.template import RequestContext

Затем обновите все ваши представления так, чтобы они выглядели так:

def someview(request, ...)
    ...
    return render_to_response('viewtemplate.html', someContext, context_instance=RequestContext(request))

В вашем settings.py , add:

TEMPLATE_CONTEXT_PROCESSORS = (
    'django.core.context_processors.auth',
    ...
    'myproj.app.context_processors.dynamic',
    'myproj.app.context_processors.sidebar',
    'myproj.app.context_processors.etc',
)

Каждый из этих context_processors является функцией, принимает объект запроса и возвращает контекст в виде словаря. Просто поместите все функции в context_processors.py внутри соответствующего приложения. Например, блог может иметь боковую панель со списком последних записей и комментариев. context_processors.py просто определит:

def sidebar(request):
    recent_entry_list = Entry.objects...
    recent_comment_list = Comment.objects...
    return {'recent_entry_list': recent_entry_list, 'recent_comment_list': recent_comment_list}

Вы можете добавить столько или меньше, сколько хотите.

Для получения дополнительной информации обратитесь к Документам по шаблонам Django .

7
ответ дан 16 December 2019 в 21:46
поделиться

или используйте универсальное представление , поскольку им автоматически передается контекст запроса.

можно использовать простое прямое универсальное представление шаблона, чтобы избежать необходимости импортировать / передать в контексте запроса.

-1
ответ дан 16 December 2019 в 21:46
поделиться

Контекстные процессоры и RequestContext (см. Ответ Тайлера) являются способом получения данных, которые используются при каждой загрузке страницы. Для данных, которые могут вам понадобиться в различных представлениях, но не во всех (особенно данных, которые на самом деле не связаны с основной целью представления, но отображаются в чем-то вроде боковой панели навигации), часто имеет смысл определить собственный шаблон тег для получения данных.

2
ответ дан 16 December 2019 в 21:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: