Wagtail маршрутизируемый вид страницы с загрузкой содержимого ajax по клику - PullRequest
0 голосов
/ 01 марта 2019

У меня есть приложение, в котором я отображаю страницу участника с таким контентом, как истории, видео и статьи.Истории, видео и статьи - это разные модели страниц.

шаблонизатор: Jinja
фреймворк: Django
CMS: wagtail

Я могу загрузить ajaxсодержимое на вкладке успешно, создав отдельное представление и соответствующий URL в urls.py с настройками ajax ниже.

Но если я попытаюсь использовать функцию страницы Wagtails с маршрутизацией, я получу 404.

Выдержка настроек Ajax:

settings = jQuery.extend(true, {}, {
                    type: 'get',
                    dataType: 'json',
                    url: vUrl,
                    beforeSend: function (jqXHR, settings) {
                        console.log(`URL ${settings.url}`)
                        $tab.html('<br>');
                        $paneHeader.removeClass(css).addClass(css);
                        $el.trigger('tabsX:beforeSend', [jqXHR, settings]);
                    },
                    success: function (data, status, jqXHR) {
                        setTimeout(function () {
                            // $tab.html(data); //Use Json data instead of html

                            $tab.html(data.html);
                            $pane.tab('show');
                            $paneHeader.removeClass(css);
                        }, 300);
                    },
                    error: function (jqXHR, status, message) {
                        $paneHeader.removeClass(css);
                    },
                }


@route(r'^/contributors/(?P<slug>[-\w]*)/articles')
def show_articles_contributed(self, request):
    if request.is_ajax():
        print("Inside AJAX")
        articles = Contributor.get_articles_by_authors(self.id)
        html = render_to_string("organisms/latest_articles.html", {"objects": articles})
        return JsonResponse({"html": html}, safe=True)
    else:
        return super(ContributorPage, self).serve(request)


URL-адрес, напечатанный из console.log
URL / contributors / test-author / article

Не удалось загрузитьресурс: сервер ответил со статусом 404 (не найдено)

class ContributorPage(RoutablePageMixin, PhoenixPage):
first_name = models.CharField(max_length=255, blank=True, default="")
last_name = models.CharField(max_length=255, blank=True, default="")
nickname = models.CharField(max_length=1024, blank=True, default="")


PhoenixPage - это не что иное, как базовая страница с метаданными, которая фактически использует базовый класс Wagtail Page.

Буду признателен за любую помощь / руководство.

Если вопрос неясен, я могу предоставить больше информации.

Спасибо


Я обнаружил проблему.
Размещение описания для будущих пользователей.Иторы этой темы.

Код Ajax здесь не являлся проблемой, но реализация маршрута Wagtail была.

@ route (r '^ / contributors / (? P [- \ w] *) / article ') <- этот маршрут не является правильным для ContributorPage <br>

ContributorPage дает URL-адрес как / contributor / author_name, в то время как author_name является слитом ContributorPage

Я просто хочу добавить / статьи к нему, чтобы получить маршрут вроде / contributor / author_name / article

, поэтому правильный путь для ContributorPage -
@route (/ article)

Так что теперь моя главная страница ContributorPage находится по адресу / contributor / author_name и

Запросы Ajax запрашиваются с использованием URL-адресов маршрутов, например,

/ contributor / author_name /статьи
/ contributor / author_name / videos
/ contributor / author_name / Stories

с соответствующим маршрутом, например,
@route (/ articles)
@route (/ videos)
@route (/ Stories)

...