Django Đảo ngược với các đối số '()' và các đối số từ khóa '{}' không tìm thấy


144

Xin chào tôi có một vấn đề bực bội.

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 trong trình duyệt nhưng để thử nghiệm, khi tôi thực hiện điều này trong trình bao:

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

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

Tôi sợ hãi:

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

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


trong django mới nhất , đảo ngược được nhập từ url. tức làfrom django.urls import reverse
suhailvs

Câu trả lời:



6

Giải pháp @ miki725 hoàn toàn chính xác. Ngoài ra, nếu bạn muốn sử dụng argsthuộc tính trái ngược với kwargs, thì bạn có thể chỉ cần sửa đổi mã của mình như sau:

project_id = 4
reverse('edit_project', args=(project_id,))

Một ví dụ về điều này có thể được tìm thấy trong tài liệu . Điều này về cơ bản làm điều tương tự, nhưng các thuộc tính được truyền dưới dạng đối số. Hãy nhớ rằng bất kỳ đối số nào được thông qua cần phải được gán một giá trị trước khi được đảo ngược. Chỉ cần sử dụng không gian tên chính xác, trong trường hợp này là 'edit_project'.


1
Tôi thích sự ngắn gọn của nó.
Bartleby

2

Vấn đề này khiến tôi rất đau đầu khi tôi cố gắng sử dụng ngược lại để tạo liên kết kích hoạt và gửi nó qua email tất nhiên. Vì vậy, tôi nghĩ từ tests.txt nó sẽ giống nhau. Cách chính xác để 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)) 

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

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

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.