Как получить данные с помощью ajax call в Django и Wagtail - PullRequest
0 голосов
/ 29 октября 2018

Я использую трясогузку с Python и Django.

У меня модель выглядит следующим образом:

class HomePage(Page):
    logo = models.ForeignKey(
        'wagtailimages.Image',
        null=True,
        blank=True,
        on_delete=models.SET_NULL,
        related_name='+'
    )
    banner_text = RichTextField(blank=True)

    def get_context(self, request):
        context = super().get_context(request)
        context['vehicles'] = get_vehicles("nl")[0:12]
        return context

    content_panels = Page.content_panels + [
        FieldRowPanel([ImageChooserPanel('logo', classname="col4")]classname="full"),
        FieldRowPanel([FieldPanel('banner_text', classname="full") classname="full")
    ]

А get_vehicles("nl") выглядит следующим образом:

def get_vehicles(lang):
    response = requests.get(API_URL, headers={'Authorization': "Token {}".format(token), "Accept-Language": lang})
    data = json.loads(response.content.decode("utf-8"))
    return data['vehicles']

Есть ли способ получить эти машины с ajax call внутри def get_context(self, request):?

Я хочу показывать какой-нибудь счетчик в моем шаблоне home_page.html, пока не будут выбраны все транспортные средства.

Я совершенно новичок в трясогузке, и я не уверен, как мне это сделать.

1 Ответ

0 голосов
/ 22 ноября 2018

get_context() здесь не годится.

Вам нужно подойти к этому в «традиционном стиле Джанго». Другими словами, вы создаете шаблон URL и представление JSON, совершенно отдельно от Wagtail.

На стороне клиента код, который выдает эти JSON-запросы в каком-то цикле, может получать, например, некоторую индикацию от хоста (то есть в возвращаемых данных JSON). ..) что "мы закончили ... больше нет данных для возврата". Увидев это, код JavaScript может, скажем, «выдать сигнал» (с какой бы платформой JS вы не использовали на этой стороне), что приведет к запуску фрагмента кода JavaScript, встроенного в целевую страницу, чтобы заставить его удалить спиннер.

...