2012-11-02 28 views
78

Xin chào, tôi có một vấn đề khó chịu.Django Reverse với các đối số '()' và các đối số từ khóa '{}' không được tìm thấy

Tôi có một mẫu url như thế này:

# mproject/myapp.urls.py 

url(r'^project/(?P<project_id>\d+)/$','user_profile.views.EditProject',name='edit_project'), 

nó hoạt động tốt trên trình duyệt nhưng để thử nghiệm, khi tôi làm điều này trong vỏ:

from django.test import Client 
from django.core.urlresolvers import reverse 

client= Client() 
response = client.get(reverse('edit_project'), project_id=4) 

tôi nhận được sợ hãi:

NoReverseMatch: Reverse for 'edit_project' with arguments '()' and keyword arguments '{}' not found. 

Tôi thiếu gì ở đây?

Trả lời

147

Bạn phải chỉ rõ project_id:

reverse('edit_project', kwargs={'project_id':4}) 

Doc here

+0

lớn. Cảm ơn. tôi phải cố gắng mọi cấu hình, ngoại trừ một điều đó! –

+0

có thể bạn po ssibly cũng bao gồm làm thế nào để làm điều này trong một mẫu? –

+1

[docs] (https://docs.djangoproject.com/en/1.8/ref/templates/builtins/#url) có các ví dụ – miki725

1

vấn đề này đã cho tôi đau đầu tuyệt vời khi tôi đã cố gắng để sử dụng đảo ngược để tạo ra liên kết kích hoạt và gửi nó qua email của khóa học. Vì vậy, tôi nghĩ từ tests.py nó sẽ giống nhau. Cách đúng để làm điều này là như sau:

from django.test import Client 
from django.core.urlresolvers import reverse 

#app name - name of the app where the url is defined 
client= Client() 
response = client.get(reverse('app_name:edit_project'), project_id=4) 
+0

Tôi vừa thử điều này, nó không hoạt động. Câu trả lời của @ miki725 là chính xác. –

+1

Tôi tin rằng một cú đúp ở sai vị trí: response = client.get (đảo ngược ('edit_project', project_id = 4)) –

-2

Các 'app_name' là không gian tên bạn đã cung cấp cho các cấu hình url, và không thực tế tên của ứng dụng.

Cách chính xác sẽ là thêm tham số bổ sung vào cấu hình url của bạn - 'không gian tên' này sẽ là 'app_name' mà user2517191 được đề cập và 'edit_project' trong client.get (đảo ngược ('app_name: edit_project') sẽ tham số tên mà bạn đã cung cấp cho các cấu hình url.

Các vấn đề liên quan