2010-06-16 31 views
17

Điều tôi muốn làm (đối với tiện ích thay đổi gần đây '- không phải là tiện ích con django trong trường hợp này) chuyển tên url vào mẫu của tôi dưới dạng biến, sau đó sử dụng như vậy: {% url sitechangeobject.urlname %} Trong đó urlname là một chuỗi có chứa tên hợp lệ cho url.Chuyển urlname biến thành thẻ url trong mẫu django

Điều này có khả thi không? Các mẫu tiếp tục phá vỡ nói rằng nó không thể tìm thấy sitechangeobject.urlname như một tên (mà là khá đúng, nó không tồn tại). Có cách nào để làm cho nó nhìn bên trong biến đó?

Có nhiều cách khác để giải quyết vấn đề này nếu không, chỉ nghĩ rằng tôi sẽ kiểm tra.

Cảm ơn!

Trả lời

27

Kể từ Django 1.3, thẻ {% url %} hỗ trợ chính xác:

{% url view_name_variable %} 
{% url 'view_name_string' %} 

... điều này trở thành hành vi mặc định trong Django 1.5.

Trước đây, bạn chỉ có tùy chọn để làm điều này:

{% url view_name_string %} 

Để có được thẻ để làm việc theo cách này trong Django 1,3 và 1,4 dự án, bạn sẽ cần dòng sau vào phía trên cùng của mỗi mẫu bạn sử dụng nó trong:

{% load url from future %} 

Theo Django 1.3 release notes:

... trong Django 1.5, các hành vi cũ sẽ được thay thế bằng các hành vi mới. Để đảm bảo khả năng tương thích với các phiên bản tương lai của Django, các mẫu hiện có phải được sửa đổi để sử dụng các thư viện và cú pháp mới trong tương lai.

Lưu ý rằng hỗ trợ cho {% load url from future %} đã bị xóa trong Django 1.9.

+0

Làm thế nào một biến sẽ được nối thành một chuỗi hậu tố để tạo thành url? Một cái gì đó như '{% url variable-'suffix '%}', tất nhiên là không hoạt động. – Romildo

+1

Có vẻ hơi lạ với tôi, nhưng tôi nghĩ bạn có thể sử dụng bộ lọc '| add'. ví dụ: '{% url variable | add: '- suffix'%}' Xem [add filter docs] (https://docs.djangoproject.com/en/1.4/ref/templates/builtins/?from=olddocs# thêm vào). – meshy

8

Lưu ý: câu trả lời này chỉ thực sự liên quan đến các phiên bản django trước 1.3. Nếu bạn đang sử dụng django 1.3 hoặc mới hơn, chức năng bắt buộc được tích hợp sẵn - vui lòng xem meshy's answer.

Thẻ tích hợp trong url không thể thực hiện việc này. Tuy nhiên django-reversetag thực hiện chính xác điều này (và hơn thế nữa).

Theo readme, thẻ reverse cung cấp bởi mã này quy định:

  • cú pháp nhất quán ("chuỗi literals" và biến)
  • Có khả năng đảo ngược quan điểm tên được lưu trữ trong các biến bối cảnh
  • phần đảo chiều
1

nếu bạn đang sử dụng Django 1.5 trở lên, django-reversetags không cần thiết nữa để chỉ chuyển tên xem dưới dạng biến thành mẫu, được sử dụng trong thẻ url.

Tôi đã nhầm lẫn với tính sẵn có của django-reversetags, chỉ cần nghĩ đến việc cập nhật vấn đề chính xác ở đây.

+0

Nó không cần thiết trong 1.3 và lên. Chỉ cần sử dụng '{% load url from future%}' – meshy

2

cho django 1.5 có thể đây là hữu ích

thường, để truy cập vào một biến qua khỏi tầm nhìn chúng tôi sử dụng {{biến}}

Tuy nhiên, đối với url trong mẫu, sau đây không làm việc: {% url 'ứng dụng: namespace' {{varible}}%}

chỉ cần sử dụng sau đây là tốt: {% url 'ứng dụng: namespace' varible%}

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