2012-04-27 29 views
8

Tôi không biết nếu điều này SO question là của cùng một vấn đề mà tôi về để mô tả, nhưng nó chia sẻ các triệu chứng tương tự. Thật không may, nó vẫn chưa được giải quyết như tôi đang viết.{% url%} cung cấp cho tôi lỗi NoReverseMatch trong khi đảo ngược() trả lại url tốt. Tại sao?

Vì vậy, đây là vấn đề của tôi. Tôi đang cố gắng thêm James Bennett's django-registration app vào dự án django của tôi. Tôi đã hoàn thành việc cấu hình nó theo nhu cầu của mình - các mẫu tùy chỉnh và các url. Ngay khi tôi nghĩ mọi thứ đều tốt đẹp. Tôi gặp lỗi NoReverseMatch khi sử dụng {% url 'testing' item_id=123 %} (Tôi cũng đã thử sử dụng tên chế độ xem, myapp.views.test, thay vào đó nhưng không có may mắn) trong một trong các mẫu tùy chỉnh theo yêu cầu của đăng ký django. Thật thú vị, tôi đã thử reverse('testing', kwargs={'item_id':123}) trong trình bao và url đã được trả lại tốt. Tôi nghĩ rằng {% url %} sử dụng reverse() trong back-end nhưng tại sao tôi nhận được kết quả khác nhau?

urls.py: (các URLconf của trang web của tôi)

urlpatterns = patterns('myapp.views', 
    url(r'^test/(?P<item_id>\d+)/$', 'test', name='testing'), 
) 

activation_email.txt:. (template cho biết Lưu ý đó là cố ý trong .txt gia hạn theo yêu cầu của django đăng ký và đó không phải là nguyên nhân của vấn đề.)

{% comment %}Used to generate the body of the activation email.{% endcomment %} 
Welcome to {{ site }}! Please activate your account by clicking on the following link: 

{% url 'testing' item_id=123 %} 

Note the activation link/code will be expired in {{ expiration_days }} days. 

tôi không biết nếu nó quan trọng nhưng chỉ nghĩ rằng tôi nên đề cập đến activation_email.txt được lưu trữ trong thư mục mẫu của myapp mặc dù nó được sử dụng bởi django-registration.

Ngoài ra, tôi đang sử dụng django 1,4

Tôi có một cảm giác rằng vấn đề có cái gì để làm với các không gian tên url, một chủ đề mà tôi chưa bao giờ hiểu, nhưng nó chỉ là một phỏng đoán ngây thơ. (IMO, tài liệu django là tuyệt vời trong việc giải thích mọi thứ về django, trừ khi nói đến các không gian tên url)

Trả lời

12

Tôi không có chuyên gia ở đây, nhưng trong một dự án Django tôi đang làm việc tại thời điểm tôi sử dụng tên của url không có dấu ngoặc kép. Tôi chỉ cần thêm dấu ngoặc kép xung quanh một dòng tương tự trong một trong các mẫu của tôi và nó tạo ra lỗi tương tự như lỗi của bạn.

Hãy thử:

{% url testing item_id=123 %} 
+1

Thú vị ~ mà làm việc !! Cảm ơn rất nhiều. Nhưng lý do đằng sau điều này là gì? Ý tôi là tất cả các ví dụ về '{% url%}' trong tài liệu django đều sử dụng dấu ngoặc kép. – tamakisquare

+0

Kiểm tra phần url được đặt tên của tài liệu: https://docs.djangoproject.com/en/dev/topics/http/urls/#naming-url-patterns Theo như tôi có thể biết, nếu bạn đang sử dụng thẻ url với một con đường thực tế để xem sau đó bạn cần dấu ngoặc kép. Nếu sử dụng tên, bạn thì không. – John

+2

Cảm ơn bạn đã tham khảo. Trong tài liệu thẻ mẫu, có một ví dụ '{% url 'myapp: view-name'%}', vì vậy tôi nghĩ rằng qoutes là cần thiết để sử dụng tên khung nhìn. Tôi đoán rằng chỉ áp dụng khi tôi sử dụng tên chế độ xem cùng với không gian tên, điều này hơi khó hiểu. – tamakisquare

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