Ошибка в коде "объект" не имеет атрибута "has_header"
Я попытался использовать dajaxice для обновления таблицы, но вижу ошибку.
Проследить:
Environment:
Request Method: GET
Request URL: http://127.0.0.1:8000/bank/index1/
Django Version: 1.5.1
Python Version: 2.7.3
Installed Applications:
('django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.messages',
'django.contrib.staticfiles',
'django.contrib.admin',
'meli',
'django_tables2',
'dajaxice',
'django_jalali')
Installed Middleware:
('django.middleware.common.CommonMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware')
Traceback:
File "/usr/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response
187. response = middleware_method(request, response)
File "/usr/lib/python2.7/site-packages/django/contrib/sessions/middleware.py" in process_response
26. patch_vary_headers(response, ('Cookie',))
File "/usr/lib/python2.7/site-packages/django/utils/cache.py" in patch_vary_headers
142. if response.has_header('Vary'):
Exception Type: AttributeError at /bank/index1/
Exception Value: 'str' object has no attribute 'has_header'
Это мой взгляд:
def index1(request):
data = MelliTable(ModelMelli.objects.filter(check=False))
RequestConfig(request, paginate={'per_page': 20}).configure(table)
table = render_to_string('meli/index.html', {'data': data })
return simplejson.dumps({'table':table})
dajaxice_functions.register(index1)
И мой JS это:
<script>
function my_callback(data){
if(data!=Dajaxice.EXCEPTION){
document.getElementById('test').innerHTML = data.table;
}
else{
alert('Error');
}
}
</script>
2 ответа
django-dajaxice
работает, оборачивая функции просмотра, здесь index1
в вашем коде, со специальным обработчиком; и обслуживать их через динамически согласованные URL-адреса вместо /bank/index1/
,
Таким образом, вам не нужно определять urlpattern /bank/index1/
для index1
просто получить доступ к нему через интерфейс Dajaxice, возможно Dajaxice.bank.index1(my_callback)
Вот.
Ошибка была вызвана тем, что нормальное представление Django должно возвращать HttpResponse()
экземпляр, в то время как index1
возвращает строку здесь (когда вы вызываете через интерфейс dajaxice, специальный обработчик, упомянутый выше, поместит строку в HttpResponse
без проблем)
Я изменяю свое представление и помещаю функцию dajaxice в ajax.py, и это мой js для ее вызова:
<script>
function setupRefresh() {
setTimeout("Dajaxice.meli.refresh(my_callback)", 5000); // milliseconds
}
</script>
Я вижу, как скрипт вызывает мой djaxice в консоли, но я не знаю, что мне написать в js-функции my_callback, чтобы изменить таблицу!
5/Jun/2013 23:25:43] "POST /dajaxice/meli.refresh/ HTTP/1.1" 200 2580
[25/Jun/2013 23:25:48] "POST /dajaxice/meli.refresh/ HTTP/1.1" 200 2580
[25/Jun/2013 23:25:53] "POST /dajaxice/meli.refresh/ HTTP/1.1" 200 2580
[25/Jun/2013 23:25:58] "POST /dajaxice/meli.refresh/ HTTP/1.1" 200 2580
[25/Jun/2013 23:26:03] "POST /dajaxice/meli.refresh/ HTTP/1.1" 200 2580
Посмотреть:
def index2(request):
table = MelliTable(ModelMelli.objects.filter(check=True))
#table.paginate(page=request.GET.get('page', 1), per_page=4)
RequestConfig(request, paginate={'per_page': 20}).configure(table)
return render(request, 'meli/index1.html', {'table': table })
Ajax:
def refresh(request):
message = ""
table = MelliTable(ModelMelli.objects.filter(check=True))
RequestConfig(request, paginate={'per_page': 20}).configure(table)
table1 = render_to_string('meli/index.html', {'table': table, 'message': message })
return simplejson.dumps({'table1':table1})
dajaxice_functions.register(refresh)
и мой шаблон:
{% extends "meli/base.html" %}
{% load render_table from django_tables2 %}
{% block content %}
<script>
function setupRefresh() {
setTimeout("Dajaxice.meli.refresh(my_callback)", 5000); // milliseconds
}
</script>
{% render_table table %}
{% endblock %}