2013-06-25 75 views
1

我試圖使用dajaxice刷新我的表,但我看到一個錯誤。dajaxice錯誤'str'對象沒有屬性'has_header'

回溯:

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> 
+0

回溯:http://dpaste.com/1270328/ – nim4n

回答

1

django-dajaxice作品包裝視圖功能,在這裏你的代碼index1,與特殊處理程序;並通過動態匹配的網址代替/bank/index1/提供服務。
因此,您不必爲index1定義urlpattern /bank/index1/,只需通過Dajaxice interface即可訪問它,也許這裏是Dajaxice.bank.index1(my_callback)

錯誤是由一個普通的Django視圖將返回一個HttpResponse()實例的原因造成的,而index1這裏返回一個字符串(當您通過dajaxice接口調用,上面提到的特殊處理程序會把字符串的HttpResponse W/O問題)

+0

TNX爲你的答案。你能幫我找到一種方法來更新我的表格嗎?我不知道如何去做 – nim4n

+1

@ nim4n請發佈您的js代碼來觸發ajax操作。 – okm

0

我改變我的觀點,並把dajaxice功能ajax.py,這是我的js調用它:

<script> 
function setupRefresh() { 
    setTimeout("Dajaxice.meli.refresh(my_callback)", 5000); // milliseconds 
} 
</script> 

我看到劇本叫我djaxice在控制檯,但我不知道我應該在my_callback js函數中寫什麼換桌子!

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 %} 
相關問題