Почему перенаправление с одной страницы на другую, возвращает данные без загрузки шаблона HTML в Django? - PullRequest
0 голосов
/ 02 ноября 2019

У меня есть таблица в представлении, где в соответствии с элементом Id, по которому щелкают, это представление перенаправляется на другой через Ajax-запрос к конечной точке Django Rest Framework и отображает информационную панель с Chartjs с динамическими данными и отправкой user_id. Я выполняю запрос успешно и возвращаю результаты конечной точки в формате json, но когда он должен перенаправить на другую страницу, он перенаправляет на пустой html-шаблон , отображающий результат json, но без моего html-шаблона. Вероятно, это действительно фиктивная проблема, но я не могу понять ошибку.

Этот ответ содержит полезный код, но не имеет поведения, которое мне нужно

Моя структура проекта выглядит следующим образом:

core
--api
--core
--static
--web
(...and other folders)

Эти маршруты связаны:

core / urls.py

urlpatterns = [
    url(r'^socialanalyzer/recent_search_twitter/$', RecentSearchTwitterView.as_view(), name='recent_search_twitter'),
    url(r'^socialanalyzer/timeline_search_twitter/$', TimelineSearchTwitterView.as_view(), name='timeline_search_twitter')
]

api.py / urls. py

urlpatterns = [
url(r'^api/search/recent_search/user/<int:user_id>/social_network/<int:social_network_id>', SearchViewSet.as_view({'post': 'recent_search'}), name='recent_search'),    url(r'^api/search/word_details/user/<int:user_id>/social_network/<int:social_network_id>/word/<string:word>', SearchViewSet.as_view({'post': 'word_details'}), name='word_details')
]

Так что в моем web / views.py мне нужно перейти от:

RecentSearchTwitterView (Recent_search_twitter.html) к TimelineSearchTwitterView (word_searched_details_twitter.html)

В этом смысле в recent_search_twitter.html у меня есть таблица с каждой строкой, как показано ниже:

<td><a href="" onclick='wordSearchedDetail("{{key.word}}")'><b>{{key.word}}</b></a></td>

Это вызов wordSearchedDetail, где находится: static/js/custom.js

function wordSearchedDetail(word){
    $.ajax({
        url:'/socialanalyzer/timeline_search_twitter/',
        type: 'GET',
        data: {
          'word': word,
        },success: function(data){
            window.location.href = window.document.location.origin + "/socialanalyzer/timeline_search_twitter/?word=" + word

          // Here will be the chartjs code

        },error: function(error_data){
          console.log("error")
          console.log(error_data)
      }
    })
}

Тогдаэта функция отправляет запрос AJAX по адресу: /socialanalyzer/timeline_search_twitter/ где находится в: web/views.py

class TimelineSearchTwitterView(View):
    """docstring for RecentSearchTwitterView"""
    def __init__(self,*args, **kwargs):
        self.response_data = {'error': [], 'data': {}}
        self.code = 0

    def get(self, request, *args, **kwargs):
        try:
            _recent_search = SearchViewSet()
            _recent_search.word_details(request,social_network=1,
                word=request.GET.get('word',None),user=1)
            self.response_data['data'] = _recent_search.response_data['data']
            self.code = _recent_search.code
            self.response_data['data']['code'] = self.code

        except Exception as e:
            logging.getLogger('error_logger').exception("[TimelineSearchTwitterView] - Error: " + str(e))
            self.code = status.HTTP_500_INTERNAL_SERVER_ERROR
            self.response_data['error'].append("[TimelineSearchTwitterView] - Error: " + str(e))
        return JsonResponse({'code':self.code,'url':'web/word_searched_details_twitter.html','data':self.response_data['data']})

Это вызывает к конечной точке /api/search/word_details/ (отправка user_id и word), которые возвращают данные json в self.response_data['data'] переменная. Наконец, функция wordSearchedDetail() получает данные.

Итак, в соответствии с этим ответом и этим ответом , я очищаю свой текущий URL-адрес: /socialanalyzer/recent_search_twitter/

Поскольку я хочу перейти к: /socialanalyzer/timeline_search_twitter/?word=<word> с помощью word_searched_details_twitter.html, но он показывает мне результаты, как показано ниже:

enter image description here

Вещи, которые я пробовал:

Правильно ли использовать метод JsonResponse ()? или есть способ получить желаемое поведение, используя render () вместо window.location.href в функции js? Я попытался использовать render () вместо JsonResponse () просто так:

return render(request,template_name='web/word_searched_details_twitter.html',status=self.code,context=self.response_data)

Это сработало и перенаправляет на: word_searched_details_twitter.html Но в консоли, где он должен отображать полученные данные послеЗапрос AJAX, он показывает мне весь HTML-код вместо данных в формате json

Пожалуйста, любая помощь будет признательна.

Я ожидаю нажать на каждое слово в: recent_search_twitter.html (in RecentSearchTwitterView)

Чтобы сделать запрос AJAX и перенаправить на: word_searched_details_twitter.html (в TimelineSearchTwitterView) `` `

Чтобы увидеть панель мониторинга, связанную с этим словом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...