Câu trả lời:
Các NoReverseMatch
lỗi được nói rằng Django không thể tìm thấy một mô hình phù hợp với url cho url bạn đã cung cấp trong bất kỳ url ứng dụng cài đặt của bạn.
Ngoại lệ NoReverseMatch được django.core.urlresolvers nêu ra khi một URL phù hợp trong URLconf của bạn không thể được xác định dựa trên các tham số được cung cấp.
Để bắt đầu gỡ lỗi, bạn cần bắt đầu bằng cách loại bỏ thông báo lỗi được cung cấp cho bạn.
NoReverseMatch tại / my_url /
Đây là url hiện đang được hiển thị, đây là url mà ứng dụng của bạn hiện đang cố truy cập nhưng nó chứa một url không thể phù hợp
Đảo ngược cho 'my_url_name'
Đây là tên của url mà nó không thể tìm thấy
với các đối số '()' và
Đây là những đối số không phải từ khóa mà nó cung cấp cho url
đối số từ khóa '{}' không tìm thấy.
Đây là các đối số từ khóa mà nó cung cấp cho url
n mẫu đã thử: []
Đây là những mẫu mà nó có thể tìm thấy trong các tệp urls.py của bạn mà nó đã cố khớp với
Bắt đầu bằng cách định vị mã trong nguồn của bạn có liên quan đến url hiện đang được hiển thị - url, chế độ xem và bất kỳ mẫu nào có liên quan. Trong hầu hết các trường hợp, đây sẽ là một phần của mã bạn đang phát triển.
Khi bạn đã hoàn thành việc này, hãy đọc mã theo thứ tự django sẽ theo dõi cho đến khi bạn đạt được dòng mã đang cố gắng tạo một url cho mã của bạn my_url_name
. Một lần nữa, đây có lẽ là một nơi bạn đã thay đổi gần đây.
Bây giờ bạn đã phát hiện ra lỗi xảy ra ở đâu, hãy sử dụng các phần khác của thông báo lỗi để khắc phục sự cố.
urls.py
(ví dụ app_name = 'my_app'
) hoặc nếu bạn đã bao gồm ứng dụng với một không gian tên (ví dụ: include('myapp.urls', namespace='myapp')
thì bạn cần bao gồm không gian tên khi đảo ngược, ví dụ {% url 'myapp:my_url_name' %}
hoặc reverse('myapp:my_url_name')
.Các đối số và đối số từ khóa được sử dụng để khớp với bất kỳ nhóm bắt giữ nào có trong url đã cho có thể được xác định bởi các ()
dấu ngoặc xung quanh trong mẫu url.
Giả sử url bạn phù hợp yêu cầu các đối số bổ sung, hãy xem thông báo lỗi và trước tiên hãy xem giá trị của các đối số đã cho có vẻ chính xác hay không.
Nếu họ không đúng:
Giá trị bị thiếu hoặc một chuỗi trống
Điều này thường có nghĩa là giá trị bạn chuyển vào không chứa giá trị mà bạn mong đợi. Hãy xem nơi bạn gán giá trị cho nó, đặt điểm dừng và bạn sẽ cần tìm hiểu tại sao giá trị này không được truyền chính xác.
Đối số từ khóa có lỗi đánh máy
Sửa lỗi này trong mẫu url hoặc trong url bạn đang xây dựng.
Nếu họ đúng:
Gỡ lỗi regex
Bạn có thể sử dụng một trang web như regexr để nhanh chóng kiểm tra xem mẫu của bạn có khớp với url bạn nghĩ bạn đang tạo hay không, Sao chép mẫu url vào trường regex ở trên cùng, sau đó sử dụng vùng văn bản để bao gồm bất kỳ url nào mà bạn nghĩ nó nên phù hợp với.
Lỗi thường gặp:
Phù hợp với .
nhân vật thẻ hoang dã hoặc bất kỳ nhân vật regex nào khác
Nhớ thoát các ký tự cụ thể bằng \
tiền tố
Chỉ khớp với các ký tự chữ thường / chữ hoa
Hãy thử sử dụng một trong hai a-Z
hoặc \w
thay vì a-z
hoặcA-Z
Kiểm tra xem mẫu bạn phù hợp có được bao gồm trong các mẫu đã thử không
Nếu không có ở đây thì có thể bạn đã quên đưa ứng dụng của mình vào INSTALLED_APPS
cài đặt (hoặc thứ tự các ứng dụng trong INSTALLED_APPS
có thể cần xem xét)
Trong Django 1.10, khả năng đảo ngược url bằng đường dẫn python của nó đã bị xóa. Đường dẫn được đặt tên nên được sử dụng thay thế.
Nếu bạn vẫn không thể theo dõi vấn đề, thì hãy hỏi một câu hỏi mới bao gồm những gì bạn đã thử, những gì bạn đã nghiên cứu (Bạn có thể liên kết với câu hỏi này), sau đó bao gồm mã có liên quan đến vấn đề - url mà bạn khớp, bất kỳ mẫu url nào có liên quan, một phần của thông báo lỗi hiển thị những gì django đã cố khớp và có thể là INSTALLED_APPS
cài đặt nếu có.
set app_name in the app's urls.py (e.g. app_name = 'my_app')
là điểm
Và đảm bảo tuyến đường của bạn trong danh sách các tuyến đường:
./manage.py show_urls | grep path_or_name
show_urls
không phải là một tính năng Django, điều này sẽ không trả lời câu hỏi.