2015-09-25 30 views
0

我在構建基於Django的站點時遇到了問題; 我需要在一開始使用Ajax運行幾個模板更新:Django Ajax請求 - 500內部服務器錯誤與「匹配查詢不存在」。錯誤

$(document).ready(function() { 
     var trees = ['1','2','3','4','5','6'] 
     for (i = 0; i < trees.length; i++) { 
      $.ajax({ 
       'url': '/structure/showtrees', 
       'data': { 
        number:trees[i] 
       }, 
       'type': 'GET', 
       'success': function (data) { 
        $("#phylo"+i).html(data); 
       } 
      }); 
     }; 
    }); 

這是通過urls.py重定向看起來是這樣的:從 進口django.conf.urls模式,網址

from structure import views 
from django.conf import settings 

urlpatterns = patterns('', 
    ..., 
    ..., 
url(r'^showtrees', views.RenderTrees, name='render') 
) 

內「views.py」爲目標函數:

def RenderTrees(request): 
print(request.session) 
number = request.session.GET['number'] 
tree = open('static/home/images/00'+number+'_tree.xml').read() 

return render(request, 'tree'+number+'.html', {'tree':tree,'num':number}) 

我有「打印(會話)」有作爲標記,但它永遠不會diplayed。 在頁面加載我得到:

GET http://localhost:8000/structure/showtrees?number=1 500 INTERNAL SERVER ERROR  464ms 

和響應是

DoesNotExist at /structure/showtrees 
Structure matching query does not exist. 

我尋尋覓覓,我找不到任何回答這個問題。

編輯: 完整回溯這裏:

DoesNotExist at /structure/showtrees 
Structure matching query does not exist. 

Request Method: GET 
Request URL: http://localhost:8000/structure/showtrees?number=1 
Django Version: 1.8.4 
Python Executable: /usr/bin/python3 
Python Version: 3.4.3 
Python Path: ['/vagrant/protwis', '/usr/lib/python3.4', '/usr/lib/python3.4/plat-x86_64-linux-gnu', ' 
/usr/lib/python3.4/lib-dynload', '/usr/local/lib/python3.4/dist-packages', '/usr/lib/python3/dist-packages' 
] 
Server time: Fri, 25 Sep 2015 19:05:08 +0200 
Installed Applications: 
('django.contrib.admin', 
'django.contrib.auth', 
'django.contrib.contenttypes', 
'django.contrib.sessions', 
'django.contrib.messages', 
'django.contrib.staticfiles', 
'debug_toolbar', 
'rest_framework', 
'rest_framework_swagger', 
'django_nvd3', 
'common', 
'api', 
'documentation', 
'news', 
'pages', 
'home', 
'protein', 
'family', 
'residue', 
'alignment', 
'similaritysearch', 
'similaritymatrix', 
'structure', 
'ligand', 
'interaction', 
'mutation', 
'phylogenetic_trees', 
'sitesearch', 
'build_gpcr') 
Installed Middleware: 
('debug_toolbar.middleware.DebugToolbarMiddleware', 
'django.contrib.sessions.middleware.SessionMiddleware', 
'django.middleware.common.CommonMiddleware', 
'django.middleware.csrf.CsrfViewMiddleware', 
'django.contrib.auth.middleware.AuthenticationMiddleware', 
'django.contrib.auth.middleware.SessionAuthenticationMiddleware', 
'django.contrib.messages.middleware.MessageMiddleware', 
'django.middleware.clickjacking.XFrameOptionsMiddleware') 

Traceback: 
File "/usr/local/lib/python3.4/dist-packages/django/core/handlers/base.py" in get_response 
    132.      response = wrapped_callback(request, *callback_args, **callback_kwargs) 
File "/vagrant/protwis/structure/views.py" in StructureDetails 
    64.  crystal = Structure.objects.get(pdb_code__index=pdbname) 
File "/usr/local/lib/python3.4/dist-packages/django/db/models/manager.py" in manager_method 
    127.     return getattr(self.get_queryset(), name)(*args, **kwargs) 
File "/usr/local/lib/python3.4/dist-packages/django/db/models/query.py" in get 
    334.     self.model._meta.object_name 

Exception Type: DoesNotExist at /structure/showtrees 
Exception Value: Structure matching query does not exist. 
Request information: 
GET: 
number = '1' 

POST: No POST data 

FILES: No FILES data 

COOKIES: 
djdt = 'hide' 
csrftoken = 'fH9XuekPOAU6drwD8tHHGBecE7YxMqms' 
sessionid = 'lf0wjer4wyyp98ez9y5ngbcawb1xxbak' 
+1

您是否檢查過.xml文件是否存在? – Gocht

+0

是的,它存在,它很好。正如我所說的,這個印刷品根本沒有被調用。 – Mee

+0

你可以做一個print(「call」)來確保視圖被調用嗎? – Firedrake969

回答

1

您所呼叫的URL是/structure/showtrees,但在您提供的urls.py文件中,只定義/showtrees。這是導致你的錯誤。爲了解決這個問題,你的JS調用更改爲/showtrees或插入你的urls.py文件名爲structure
新的應用程序似乎使用的是Structure.objects.get,地方和Django的提出了一個DoesNotExists exception內。檢查您的結構對象是否存在於您的數據庫中。
你的問題是在這條線:

crystal = Structure.objects.get(pdb_code__index=pdbname) 

檢查該查詢集的過濾器。

+0

如果這是真的,它將顯示404而不是500錯誤。 – Firedrake969

+0

這不是,「^ showtrees」指向當前目錄; 如果這是真的,我會得到404而不是500. – Mee

+0

你是對的,我的錯。 –

0

好吧,我發現在我的代碼的問題,在urls.py URL的一個有一個正則表達式是抓住任何字符串傳遞,並由此而不是調用此:

url(r'^showtrees', views.RenderTrees, name='render') 

它調用的其他功能。感謝幫助!