У меня есть таблица в представлении, где в соответствии с элементом 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
, но он показывает мне результаты, как показано ниже:
Вещи, которые я пробовал:
Правильно ли использовать метод 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) `` `
Чтобы увидеть панель мониторинга, связанную с этим словом.